如何在原型上“覆盖”一个已定义的(get-)属性?

10 浏览
0 Comments

如何在原型上“覆盖”一个已定义的(get-)属性?

我有一些代码,在原型上定义了一个getter(如果相关的话,没有setter)。在99.99%的情况下,返回的值是正确的;然而,目标是为特定的对象设置属性以评估为不同的值。

foo = {}
Object.defineProperty(foo, "bar", {
    // 只返回奇数的骰子面
    get: function () { return (Math.random() * 6) | 1; }
});
x = Object.create(foo);
x.bar       // => 例如 5
x.bar = 4   // 通过公正的掷骰子
x.bar       // 不对 => 例如 3

如何覆盖x这个已存在的对象的属性,使其可赋值(例如具有默认的属性行为)?

附加说明:虽然可以在x上定义一个新的属性(值或get/set),但我想知道是否有一种方法可以停止[原型]上属性的行为,并将"bar"转回成特定实例的普通/临时属性。

0