如何使用for循环在类中创建对象?

时间:2013-03-01 03:00:19

标签: javascript

我正在尝试基于数组参数在类中创建属性。你怎么能这样做?

请参阅以下内容,以便了解我正在尝试做的事情:

function Person(colors) {  
    this.color = (function () {
        this.color = new Object();
        for (q=0; q<colors.length; ++q) {
            var r;
            switch (q) {
                case 0: r = "favorite"; break;
                case 1: r = "likes"; break;
                case 2: r = "hates"; break;
                default: r = q; break;
            }            
            this.color.r = colors[q];
        }
    }).call(this);
}

var people = {
    george: new Person(["blue", "yellow", "green"]),
    bob: new Person(["green", "purple", "white"])
};

console.log(people.george.color.favorite);

基本上我正在尝试:

this.color = {
    favorite: colors[0],
    likes: colors[1],
    hates: colors[2]
};

使用for循环。有什么想法吗?

顺便说一句,我不确定是否说“this.color = new Object();”在this.color内部实际上是有效的,它只是我尝试过的东西。你怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要这样做,这似乎不是一个好主意。

您的代码中出现的问题是您没有使用括号表示法。

改变这个:

this.color.r = colors[q];

对此:

this.color[r] = colors[q];

括号表示法是指'访问其名称放在变量r'中的属性,而不是'访问名为r'的属性。

Here is a working example

我建议您考虑使用JavaScript文字对象表示法。您的整个代码可以重新计算为:

var people = {
    george:{
        color:{favorite:"blue",likes:"yellow",hates:"green"}
    },
    bob:{
        color:{favorite:"green",likes:"purple",hates:"white"}
    }
};