据我所知,您希望在JavaScript对象属性上使用onChange。答案是否定的,这种功能不存在。
但是,您可以编写一个像这样的setter函数(作为概念验证):
var element = {};
element.setProperty = function(property, value) {
if (typeof(element.onChange) === 'function') {
element.onChange(property, element[property], value);
}
element[property] = value;
};
element.onChange = function(property, oldValue, newValue) {
alert(property + ' changed from ' + oldValue + ' to ' + newValue);
};
element.setProperty('something', 'Hello world!');
现在你会收到一个带有“something changed from undefined to Hello World!”的警告框。而(element.something === 'Hello World!')
将返回true
。
如果你现在调用:
element.setProperty('something', 'Goodbye world!');
当你使用“setProperty”方法来设置属性时,如果要捕获此事件,你将得到一个警报框,“something changed from Hello World! to Goodbye World!”。
当然,如果你想捕获此事件,你必须在所有代码中仅通过“setProperty”方法设置属性!
编辑:
将来你可能能够使用Object.observe()。
编辑2:
现在还有代理。