我的程序中有以下对象
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;
然后我打印出属性名称,比如
function displayStats() {
var statsHtml = "";
for ( var prop in player ) {
statsHtml += "<p id = 'displayPlayerHealth'>" + prop + "</p>";
}
$('.stats').html( statsHtml);
console.log(statsHtml);
}
displayStats();
这很好,但是我声明的其他财产是
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 );
}
} );
不要在这里打印小提琴。
现在我输入了这段代码,以确保它们被定义为
console.log(player.hitRating);
这给了我4
,正是我所期望的。
那么,我如何循环使用Object.defineProperty
创建的对象的属性呢?
对我的代码的任何其他评论和帮助也将不胜感激。
只需使它们成为enumerable: true
Object.defineProperty(player,"hitRating",{
set: function() {
return 3 + ( this.level );
},
get: function() {
return 3 + ( this.level );
},
enumerable: true
} );
小提琴
来自MDN
可枚举
true当且仅当此属性在对应对象的属性的枚举默认值设置为false。