2010-11-29 5 views
0

Я хочу заменить атрибуты экземпляра простым способом и сделать это внутри самого класса. Поэтому я могу воспользоваться конструктором и не создавать огромный метод для обновления.Обновление объекта JS

function Champ(champ){ 
    var instance = this 
    instance.id = champ.id 
    // PERSONAL 
    instance.name = champ.name 
    instance.lore = champ.lore 
    // ATTRIBUTES 
    instance.attr1 = champ.attr1 
    instance.attr2 = champ.attr2 
    instance.fitness = champ.fitness 
    // BARS 
    instance.energy = champ.energy 
    instance.stress = champ.stress 

    function update(new_champ){ 
    instance = new Champ(new_champ); 
    } 

    this.location = "1" 

    this.update = update 
} 

// I will put in a simple way, how does it fail for me and how do I wanted it to behave 

c = new Champ({energy: 1, stress : 1}) 
c.energy //=> 1 (OK) 
c.update({ energy: 9, stress: 9}) 
c.energy //=> 1 (FAIL, I wanted it to be 9) 

Я предполагаю, что я являюсь очень наивным, есть хороший способ для того, чтобы работать, делая этот вид замены контекста внутри класса?

ответ

5

Почему не что-то вроде:

function update(new_champ) { 
    for(var prop in new_champ) { 
     if(new_champ.hasOwnProperty(prop) && this.hasOwnProperty(prop)) { 
      this[prop] = new_champ[prop]; 
     } 
    } 
} 

Этого цикла по свойствам объекта, который вы передаете функции и обновляет соответствующее свойство экземпляра только если экземпляр имеет такое свойство.

КПП. вы должны рассмотреть возможность использования prototype для создания методов класса.

+0

Спасибо, также, хорошая ссылка – 2010-11-29 13:23:47

Смежные вопросы