2010-11-29 16 views
0

Ce que je veux, c'est remplacer les attributs de l'instance d'une manière simple, et le faire dans la classe elle-même. Je peux donc profiter du constructeur et ne pas avoir à créer une énorme méthode juste pour mettre à jour.Mise à jour d'un objet 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) 

Je suppose que je suis être vraiment naïf, est-il un bon moyen pour que cela fonctionne faire ce genre de remplacement de contexte dans la classe?

Répondre

5

Pourquoi ne pas quelque chose comme:

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

Cette boucle sur les propriétés de l'objet que vous passez à la fonction et met à jour la propriété correspondante de l'instance que si l'instance a une telle propriété.

Btw. vous devriez envisager d'utiliser prototype pour créer des méthodes de classe.

+0

Merci, aussi, belle référence –