5
我有一些代码定义一个getter(但没有setter,如果这是相关的)原型。返回的值在99.99%的情况下是正确的;但是,目标是将属性设置为针对特定对象评估不同的值。如何“覆盖”原型上的定义(get-)属性?
foo = {}
Object.defineProperty(foo, "bar", {
// only returns odd die sides
get: function() { return (Math.random() * 6) | 1; }
});
x = Object.create(foo);
x.bar // => eg. 5
x.bar = 4 // by fair dice roll
x.bar // nope => eg. 3
如何属性被覆盖了X,现有的对象,使得其分配(例如,具有默认属性的行为)?
附加说明:虽然可以在x上定义新的属性(值或get/set),但我正在寻找是否有办法通过停止属性在[prototype]中的行为并将“bar”回到特定实例的正常/临时属性。
聪明。我对这个问题做了一些编辑(最后主要是一个条款/句子)。主要是,有没有办法简单地从特定实例中“删除”属性定义? – user2864740 2014-10-10 09:52:58
@ user2864740:不,你必须在实例上创建一个自己的属性来掩盖原型的属性;如果你想让它总是返回undefined,那么它会有点像它不在那里:Object.defineProperty(x,“bar”,{value:undefined}) ;' – 2014-10-10 09:54:43
@ user2864740:我已经添加了第二个片段;在阅读上面的问题和上面的评论之后,我认为他们略有不同。 HTH。 – 2014-10-10 09:57:20