From bf0798d397c412e6993370a8d5c68797d38102f4 Mon Sep 17 00:00:00 2001 From: Matt Pass Date: Thu, 7 Mar 2013 09:45:03 +0000 Subject: [PATCH] object.watch polyfill lib --- test/object-watch.js | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/object-watch.js diff --git a/test/object-watch.js b/test/object-watch.js new file mode 100644 index 0000000..62ce828 --- /dev/null +++ b/test/object-watch.js @@ -0,0 +1,54 @@ +/* + * 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; + } + }); +} \ No newline at end of file