我使用p5.js库创建了一个小沙箱:http://gosuness.free.fr/balls/
我正在尝试实现一种处理侧面选项的方法,这些方法是使用键盘快捷键切换的。
这就是我试图做的事情:
var options =
{
Option: function(name, value, shortcut)
{
this.name = name;
this.shortcut = shortcut;
this.value = value;
this.show = function ()
{
var texte = createElement("span",this.name + " : " + this.shortcut + "<br />");
texte.parent("options");
texte.id(this.name);
}
},
toggle: function(shortcut)
{
for (var o in this)
{
console.log(o);
if (o.shortcut == shortcut)
{
o.value = !o.value;
changeSideText("#gravity",gravity);
addText("Toggled gravity");
}
}
}
};
我在对象选项中实例化每个选项:
var gravity = new options.Option("gravity", false,"G");
var paintBackground = new options.Option("paintBackground",false,"P");
当我调用函数options.toggle时,console.log(o)
给了我&#34; Option&#34; &#34;肘节&#34 ;.但我想要的是让for (var o in this)
给我对象选项的属性列表,在这种情况下是gravity和paintBackground
我该怎么做?
谢谢!
答案 0 :(得分:0)
当您创建Option的实例时,它不会保留在变量选项中,而是保存在提供的变量中。
var gravity = new options.Option("gravity", false,"G");
创建位于重力变量下的Option实例。
你的迭代器(此处的var o)迭代选项属性,并使用对象方法的正确输出。
如果您希望代码在选项变量中存储Option的新实例,则可以修改
之类的代码var options =
{
instances: [],
Option: function(name, value, shortcut)
{
this.name = name;
this.shortcut = shortcut;
this.value = value;
this.show = function ()
{
var texte = createElement("span",this.name + " : " + this.shortcut + "<br />");
texte.parent("options");
texte.id(this.name);
}
options.instances.push(this);
},
toggle: function(shortcut)
{
for (var i in this.instances)
{
console.log(this.instances[i]);
if (this.instances[i].shortcut == shortcut)
{
this.instances[i].value = !this.instances[i].value;
changeSideText("#gravity",gravity);
addText("Toggled gravity");
}
}
}
};
这是你想要的工作示例,但我不认为这是一种可靠的设计模式。