| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*
- * 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, writeHandler, readHandler) {
- var
- oldval = this[prop]
- , newval = oldval
- , getter = function () {
- if(readHandler != undefined)
- readHandler.call(this, prop);
- return newval;
- }
- , setter = function (val) {
- oldval = newval;
- return newval = writeHandler.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;
- }
- });
- }
|