3 回答
TA贡献2051条经验 获得超10个赞
这样做是一个非常糟糕的主意,因为在某些情况下它会导致非常奇怪的行为,但是有可能:
var Model = function(x) { this.x = x };
Object.defineProperty(Model.prototype, 'a', (function() {
var lastSelf;
function get() { return lastSelf.x }
get.on = function () { return lastSelf.x * 2 };
return { get() { lastSelf=this; return get } };
})());
var m = new Model(17);
console.log(m.a(), m.a.on());
为什么?我在下面看到您的答案,试图了解哪些是不好的情况。
您不能传递a变量。获取相同对象的属性后,
必须on立即授予对以下内容的访问权限a:
var m1 = new Model(1), m2 = new Model(3);
console.log(m1.a(), m2.a(), m1.a.on(), m2.a.on()); // 1 3 2 6 - ok
var a1 = m1.a, a2 = m2.a;
console.log(m1.a(), m2.a(), a1.on(), a2.on()); // 1 3 6 6 - ooops!
console.log(m1.a(), m2.a(), m1.a(), a1.on(), a2.on()); // 1 3 1 2 2 - ooops!
添加回答
举报