Object.create 中的对象属性值是常量吗?
Are object properties value constants in Object.create?
这是一个很好奇的问题,我一直在学习一些东西 Javascript 并且我得到了可以工作的代码,但我想了解为什么会这样:
为什么在 Object.create 之外创建的 att 和 def boost 可以工作,但 属性 hp 是常量?
let Pokemon = {
def: this.def,
att: this.att,
defBoost: function() {
this.def = this.def + this.def
return this.def;
},
attBoost: function() {
this.att = this.att + this.att
return this.att;
},
hpBoost: function() {
this.hp = this.hp + this.hp
return this.hp;
}
}
let psyduck = Object.create(Pokemon, {
name: {
value: "Psyduck"
},
hp: {
value: 500
}
});
psyduck.def = 12;
psyduck.att = 20;
console.log(psyduck);
psyduck.attBoost();
psyduck.defBoost();
psyduck.hpBoost();
console.log(psyduck);
当您使用 descriptor 定义 属性 时,如 Object.defineProperties
或 Object.create
,您未指定的所有属性默认为 false
.所以当你有
hp: { value: 500}
表现得像
hp: {
value: 500,
enumerable: false,
writable: false,
}
writable: false
表示 属性 是 read-only.
另一方面,当通过赋值创建 属性 时,enumerable
和 writable
都默认为 true
。
此外,请确保始终写入 strict mode,这样分配给 read-only 属性会引发错误,而不是静默失败!
这是一个很好奇的问题,我一直在学习一些东西 Javascript 并且我得到了可以工作的代码,但我想了解为什么会这样:
为什么在 Object.create 之外创建的 att 和 def boost 可以工作,但 属性 hp 是常量?
let Pokemon = {
def: this.def,
att: this.att,
defBoost: function() {
this.def = this.def + this.def
return this.def;
},
attBoost: function() {
this.att = this.att + this.att
return this.att;
},
hpBoost: function() {
this.hp = this.hp + this.hp
return this.hp;
}
}
let psyduck = Object.create(Pokemon, {
name: {
value: "Psyduck"
},
hp: {
value: 500
}
});
psyduck.def = 12;
psyduck.att = 20;
console.log(psyduck);
psyduck.attBoost();
psyduck.defBoost();
psyduck.hpBoost();
console.log(psyduck);
当您使用 descriptor 定义 属性 时,如 Object.defineProperties
或 Object.create
,您未指定的所有属性默认为 false
.所以当你有
hp: { value: 500}
表现得像
hp: {
value: 500,
enumerable: false,
writable: false,
}
writable: false
表示 属性 是 read-only.
另一方面,当通过赋值创建 属性 时,enumerable
和 writable
都默认为 true
。
此外,请确保始终写入 strict mode,这样分配给 read-only 属性会引发错误,而不是静默失败!