对象内的(var o)

时间:2016-12-22 16:56:49

标签: javascript oop object foreach

我使用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

我该怎么做?

谢谢!

1 个答案:

答案 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");
            }
        }
    }
};

这是你想要的工作示例,但我不认为这是一种可靠的设计模式。