使用Object.create可以在Javascript中定义setter和getter方法。
o = Object.create(Object.prototype, {
fooBar: {
get: function() { return "Meh" },
set: function(value) { console.log(value) }
}
});
console.log(o)
将始终返回Meh,而执行o = "Heyo"
只会直接输出新值,而不会更改o
。
有没有什么理由不应该使用或者依赖这个行为来触发事件?像angular和ember这样的双向绑定框架会不会利用这个特性?单元测试会不会?
在不使用显式setter和getter的情况下,观察触发事件变化的实际标准方法是什么?
1条答案
按热度按时间fdbelqdn1#
有三种方法可以观察JavaScript对象中的更改:
1.方法(例如set/get或组合)
1.使用计时器轮询以检查属性
1.处理由浏览器内部处理的属性的观察器
方法1很常见也很简单。如果你想使用setter/getter,你可以自己决定。也可以选择将它们组合使用:
很干净很直接。
如果要使用属性,则需要使用计时器进行轮询,或者使用对象观察器。
然而,目前对对象观察器的支持不是很好(上次我检查过)。Chrome有支持,Firefox有自己的观察器系统等等,所以如果你使用这些,你需要准备你的代码来处理不支持它的情况。这基本上意味着你需要轮询代替。因此,方法与设置/获取等是一个更好的方法IMO。
观察器对于属性非常有用。它允许您以如下方式设置属性:
并触发一个回调函数来处理这个变化。注意,它将在任何属性变化时触发回调函数,因此需要迭代这些事件。
例如: