考虑下面的守则:
function createFoo() {
var val;
function Foo() {}
Object.defineProperty(Foo.prototype, 'foo', {
get: function () {
return val;
},
set: function (value) {
val = value;
document.write('foo value set to : ', value);
}
});
return new Foo();
}
var foo = createFoo();
Object.observe(foo, function (changes) { document.write(changes); });
foo.foo = 'bar';
为什么Object.observe的处理程序从来不被触发?一个对象原型能被“观察”吗?
(请不要建议使用某种第三方图书馆。)
更新
请阅读评论,以获得更多的信息和解决这个问题的办法。
发布于 2016-01-16 01:49:04
这
foo.foo = 'bar';既不修改foo对象,也不修改它的原型,因此,观察者不报告任何内容。
下面是在this.val = value;上触发观察者的版本:
function createFoo() {
function Foo() {}
Object.defineProperty(Foo.prototype, 'foo', {
get: function () {
return this.val;
},
set: function (value) {
this.val = value;
document.write('foo value set to : ', value);
}
});
return new Foo();
}
var foo = createFoo();
Object.observe(foo, function (changes) { document.write("<br>observer:", changes); });
foo.foo = 'bar';
https://stackoverflow.com/questions/34822610
复制相似问题