Javascript 如何观察对象的价值,即对象的价值
我有一个这样的物体:Javascript 如何观察对象的价值,即对象的价值,javascript,jquery,prototype,Javascript,Jquery,Prototype,我有一个这样的物体: var obj={key1:“你好”, 键2:{keyA:“1”,keyB:“2”} 我当前正在使用此代码来观察所选键的值何时更改: if (!Object.prototype.watch) { Object.defineProperty(Object.prototype, "watch", { enumerable : false, configurable : true, writable : false,
var obj={key1:“你好”,
键2:{keyA:“1”,keyB:“2”}
我当前正在使用此代码来观察所选键的值何时更改:
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;
}
});
}
obj.watch("key1", function(id, oldval, newval) {
console.log(newval)
});
`
当“你好”发生变化时,我可以处理事件。但是,如果对象的属性发生变化(Key2),而不使用前面的函数监视对象的所有元素(KeyA和KeyB),我如何处理事件呢
说得更好。。当对象发生更改时,是否可以在不监视该对象的所有元素的情况下获得通知
塔安库
当对象[属性]发生更改时,是否可以在不监视该对象的所有元素的情况下获得通知
不可以。您的watch
函数依赖于getter/setter,它们始终是特定于属性的。您可以做什么:
- 将您的对象实现为一个,它的设计目的正是为了实现您想要的。然而,这只是一个草案,目前只是一个例子
- 使用,但这也只是一个草稿
- 使用一个显式的getter/setter方法,该方法获取更新的属性名作为参数
由于您需要的功能不同于任何现有功能,因此必须使用自定义功能,该功能将查找属性链中的任何更改,并使用类似以下属性更改处理程序:
function handleObjectChange(obj、oldPropValue、newPropValue、propertyPath)
,其中propertyPath是指向已更改属性的数组(expl1:['KeyA'];expl2:['TimeData','duration'])和oldPropValue
/newPropValue
是刚刚更改的属性的新旧值。当对象本身发生更改时,
propertyPath
为空/未定义,在这种情况下,old/newpropertyValue
包含对象的旧/新值
显然,这只是实现你所追求的目标的一种方式,但基本点是:既然这是一种特定的需求,那么就构建你自己的特定答案