mirror of
https://github.com/cytodev/LightDMMock.git
synced 2024-11-24 23:19:49 +01:00
Replaces Object.watch shim with polyfill by Eli Grey
Fixes issues where objects get hijacked by the shim.
This commit is contained in:
parent
211f9a5e1c
commit
309c9d90c8
@ -418,34 +418,58 @@ window.checkArguments = function(args, length, types) {
|
|||||||
* Object.watch shim *
|
* Object.watch shim *
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
if(!Object.prototype.watch) {
|
/*
|
||||||
Object.prototype.watch = function (prop, handler) {
|
* object.watch polyfill
|
||||||
var oldval = this[prop];
|
*
|
||||||
var newval;
|
* 2012-04-03
|
||||||
var getter = function() {
|
*
|
||||||
return newval;
|
* By Eli Grey, http://eligrey.com
|
||||||
};
|
* Public Domain.
|
||||||
var setter = function(val) {
|
* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
|
||||||
oldval = newval;
|
*/
|
||||||
newval = handler.call(this, prop, oldval, val);
|
|
||||||
return newval;
|
|
||||||
};
|
|
||||||
|
|
||||||
if(delete this[prop]) {
|
// object.watch
|
||||||
Object.defineProperty(this, prop, {
|
if (!Object.prototype.watch) {
|
||||||
get: getter,
|
Object.defineProperty(Object.prototype, "watch", {
|
||||||
set: setter
|
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;
|
||||||
|
newval = handler.call(this, prop, oldval, val);
|
||||||
|
return newval;
|
||||||
|
};
|
||||||
|
|
||||||
|
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) {
|
if(!Object.prototype.unwatch) {
|
||||||
Object.prototype.unwatch = function (prop) {
|
Object.defineProperty(Object.prototype, "unwatch", {
|
||||||
var val = this[prop];
|
enumerable: false,
|
||||||
delete this[prop];
|
configurable: true,
|
||||||
this[prop] = val;
|
writable: false,
|
||||||
};
|
value: function (prop) {
|
||||||
|
var val = this[prop];
|
||||||
|
delete this[prop]; // remove accessors
|
||||||
|
this[prop] = val;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
LightDMMock.watch('default_language', function() {
|
LightDMMock.watch('default_language', function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user