0

配列引数に基づいてクラスにプロパティを作成しようとしています。どうすればこれを行うことができますか?

私がやろうとしていることを見ることができるように、次を参照してください。

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 の内部は実際に有効です。これは私が試したものです。他にどのようにできますか?

4

1 に答える 1

1

なぜあなたがこれをしているのかわかりません、それは特に良い考えのようには思えません。

コードの何が問題になっているのかというと、角かっこ表記を使用していないということです。

これを変える:

this.color.r = colors[q];

これに:

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

角かっこ表記は、「rという名前のプロパティにアクセスする」の代わりに「変数rに名前が配置されているプロパティにアクセスする」ことを意味します。

これが実際の例です

代わりにJavaScriptリテラルオブジェクト表記の使用を検討することをお勧めします。コード全体を次のようにリファクタリングできます。

var people = {
    george:{
        color:{favorite:"blue",likes:"yellow",hates:"green"}
    },
    bob:{
        color:{favorite:"green",likes:"purple",hates:"white"}
    }
};
于 2013-03-01T03:06:40.927 に答える