[FIX] Add prototype watch in js object. That will allow to listen change on some library for example. It's used to know if jquery is overrided by an external script.
bzr revid: jke@openerp.com-20140414145802-osjcjj01f8ehwsqc
This commit is contained in:
parent
2429e04ec2
commit
65a6b922b5
|
@ -0,0 +1,58 @@
|
|||
(function() {
|
||||
/*
|
||||
* object.watch polyfill
|
||||
*
|
||||
* 2012-04-03
|
||||
*
|
||||
* By Eli Grey, http://eligrey.com
|
||||
* Public Domain.
|
||||
* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
|
||||
*/
|
||||
|
||||
// object.watch
|
||||
if (!Object.prototype.watch) {
|
||||
Object.defineProperty(Object.prototype, "watch", {
|
||||
enumerable: false
|
||||
, configurable: true
|
||||
, writable: false
|
||||
, value: 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
|
||||
Object.defineProperty(this, prop, {
|
||||
get: getter
|
||||
, set: setter
|
||||
, enumerable: true
|
||||
, configurable: true
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// object.unwatch
|
||||
if (!Object.prototype.unwatch) {
|
||||
Object.defineProperty(Object.prototype, "unwatch", {
|
||||
enumerable: false
|
||||
, configurable: true
|
||||
, writable: false
|
||||
, value: function (prop) {
|
||||
var val = this[prop];
|
||||
delete this[prop]; // remove accessors
|
||||
this[prop] = val;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
})();
|
||||
|
Loading…
Reference in New Issue