可能是重复问题:
所有浏览器都支持的Javascript Object.Watch方法?
我刚读了Mozilla对于 watch() 方法 的文档,看起来非常有用。
然而我找不到Safari和Internet Explorer中类似的方法。
你如何在各个浏览器之间实现可移植性?
可能是重复问题:
所有浏览器都支持的Javascript Object.Watch方法?
我刚读了Mozilla对于 watch() 方法 的文档,看起来非常有用。
然而我找不到Safari和Internet Explorer中类似的方法。
你如何在各个浏览器之间实现可移植性?
我之前创建了一个小的object.watch替代方案。它能够在IE8、Safari、Chrome、Firefox、Opera等浏览器中运行。
/*
* object.watch v0.0.1: Cross-browser object.watch
*
* By Elijah Grey, http://eligrey.com
*
* A shim that partially implements object.watch and object.unwatch
* in browsers that have accessor support.
*
* Public Domain.
* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
*/
// object.watch
if (!Object.prototype.watch)
Object.prototype.watch = function (prop, handler) {
var oldval = this[prop], newval = oldval,
getter = function () {
return newval;
},
setter = function (val) {
oldval = newval;
return newval = handler.call(this, prop, oldval, val);
};
if (delete this[prop]) { // can't watch constants
if (Object.defineProperty) // ECMAScript 5
Object.defineProperty(this, prop, {
get: getter,
set: setter
});
else if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { // legacy
Object.prototype.__defineGetter__.call(this, prop, getter);
Object.prototype.__defineSetter__.call(this, prop, setter);
}
}
};
// object.unwatch
if (!Object.prototype.unwatch)
Object.prototype.unwatch = function (prop) {
var val = this[prop];
delete this[prop]; // remove accessors
this[prop] = val;
};
el.style.width
)上,这在Safari中无法正常工作。 - Jani Hartikainen很遗憾,这不是一种便携式的解决方案。据我所知,IE没有类似的功能,但如果有的话会非常棒。
你可能可以通过覆盖方法和变量来实现自己的通知系统。但我认为这并不是非常关键的问题,而且我也不知道你打算用这样的系统做什么。