如何检测Javascript中对象的属性是否已更改?我特别希望在对象的属性数量发生变化(无论属性已获得还是丢失)时调用函数。我想避免使用方法,而是要设置和更改对象的属性,因为那样会很快变得笨拙,而setInterval
显然不是一种选择。那么,这可能吗?
编辑:我正在专门寻找一种方法,该方法通过类似于数组对象上的length
属性获取对象属性的长度。我假设每当添加或删除索引时,它们都会更改长度,但是显然并非如此。 Javascript的原始设计者是如何进行管理的?
最佳答案
因此,总结一下我在评论中所说的一切:ES6将提供代理,这些代理应启用诸如“新属性”或“属性删除”之类的事件的处理程序。 (不过,我并没有对此进行过多研究。)不幸的是,要花费很多年才能使代理成为跨浏览器。
至于对象的length
属性,您可以为此定义一个getter函数,但这将在IE8中中断,因为IE仅在IE9中实现了getter。因此,这剩下一个length()
方法。所以:
function objectLength () {
return Object.keys( this ).length;
}
然后,请确保您的对象具有此功能(作为自己的属性或继承的属性):
yourObj.length = objectLength;
要么
YourConstructor.prototype.length = objectLength;