2013-03-01 1 views
0

Я экспериментирую с созданием свойств в классе на основе аргумента массива. Как вы можете это сделать?Как создать объект внутри класса с помощью цикла for?

Пожалуйста, обратитесь к следующему, так что вы можете увидеть, что я пытаюсь сделать:

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] 
}; 

используя для цикла. Есть идеи?

Кстати, я не уверен, указывая «this.color = new Object();» внутри this.color действительно действительно, это просто то, что я пытался. Как еще вы можете это сделать?

+1

«использование петли» --- любая практическая причина для этого? – zerkms

+0

Почему бы просто не передать объект в качестве параметра? – elclanrs

+0

@Korey, любая удача, решающая это? Что вы в итоге сделали? –

ответ

1

Я не уверен, почему вы это делаете, это не похоже на хорошую идею.

Что не так в коде, что вы не используете нотацию с кронштейнами.

Изменить это:

this.color.r = colors[q]; 

Для этого:

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

Кронштейн обозначение означает «доступ к собственности которого назван помещается в переменную г» вместо «к свойству имени г».

Here is a working example

Я предлагаю вам рассмотреть возможность использования код JavaScript буквальный объект обозначения вместо. Весь ваш код можно было бы переустановить как:

var people = { 
    george:{ 
     color:{favorite:"blue",likes:"yellow",hates:"green"} 
    }, 
    bob:{ 
     color:{favorite:"green",likes:"purple",hates:"white"} 
    } 
}; 
Смежные вопросы