如何循环访问由 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;

然后我打印出属性名称,比如

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

最新更新