如何使方法"toString"私有?



如何为"武器"实现方法"toString",该方法对于Object.keys不可用((。

function Weapon(name,damage) {
this.name = name;
this.damage = damage;
this.toString = function () {
return this.name + this.damage + " damage";
}
}
var bow = new Weapon(' Golden bow, ',20);
var sword = new Weapon(' Magic sword, ', 40);
console.log(bow.toString());
console.log(sword.toString());
Object.defineProperty(Weapon, "toString", {enumerable: false});

来自 MDN 关于Object.keys()

Object.keys()返回一个数组,其元素是对应于直接在对象上找到的可枚举属性的字符串。

因此,要么使属性不可枚举

function Weapon(name,damage) {
this.name = name;
this.damage = damage;
Object.defineProperty(this, 'toString', {
value: function () {
return this.name + this.damage + " damage";
},
// enumerable: false, // is implicitly set
});
}

或者通过在原型上定义它来使其不是"拥有"属性

function Weapon(name,damage) {
this.name = name;
this.damage = damage;
}
Weapon.prototype.toString = function () {
return this.name + this.damage + " damage";
};

如果您使用class语法,则可以"免费"获得两者:

class Weapon {
constructor(name,damage) {
this.name = name;
this.damage = damage;
}
toString()
return this.name + this.damage + " damage";
}
}

toString将在原型上定义,并且不可枚举。

最新更新