2013-09-01 3 views
2

l'objet suivant dans mon programmecomment boucle à i ont de propriétés de l'objet créé par Object.defineProperty

function Player(id) { 
    this.id = id; 
    this.healthid = this.id + "health"; 
    this.displayText = "blah blah"; 
    this.inFight = false; 
    this.currentLocation = 0; 
    this.xp = 0; 
    this.level = 1; 
} 

var player = new Player('player'); 

player.currentHealth = player.health; 

et j'imprimer les noms de propriété comme si

function displayStats() { 
    var statsHtml = ""; 
    for (var prop in player) { 
     statsHtml += "<p id = 'displayPlayerHealth'>" + prop + "</p>"; 
    } 

    $('.stats').html(statsHtml); 
    console.log(statsHtml); 
} 

displayStats(); 

qui fonctionne très bien, mais l'autre de la propriété que je déclare comme si

Object.defineProperty(player,"health",{ 
    set: function() { 
    return 10 + (this.level * 15); 
    }, 
    get: function() { 
    return 10 + (this.level * 15); 
    } 
}); 


Object.defineProperty(player,"strength",{ 
    set: function() { 
     return (this.level * 5); 
    }, 
    get: function() { 
     return (this.level * 5); 
    } 
}); 

Object.defineProperty(player,"hitRating",{ 
    set: function() { 
     return 3 + (this.level); 
    }, 
    get: function() { 
     return 3 + (this.level); 
    } 
}); 

donT imprimer fiddle here.

maintenant je mettre dans ce code pour vous assurer qu'ils sont définis

console.log(player.hitRating); 

qui me donne 4, exactement ce que je pense. Alors comment faire une boucle sur les propriétés d'un objet créées avec Object.defineProperty?

d'autres commentaires et de l'aide sur mon code sont également appréciés.

Répondre

6

Assurez-les enumerable: true

Object.defineProperty(player,"hitRating",{ 
    set: function() { 
     return 3 + (this.level); 
    }, 
    get: function() { 
     return 3 + (this.level); 
    }, 
    enumerable: true 
}); 

fiddle

De MDN

dénombrable
vrai si et seulement si cette propriété apparaît lors de l'énumération des propriétés sur le correspo objet nding. Par défaut à false. Comment créer des membres (fonctions, variables, etc.), non définis par `Object.defineProperty` NON énumérables?

+0

Tout moyen de le faire? – toddmo

Questions connexes