Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测对象值何时更改?_Javascript_Jquery_Javascript Objects_Jquery Events - Fatal编程技术网

Javascript 如何检测对象值何时更改?

Javascript 如何检测对象值何时更改?,javascript,jquery,javascript-objects,jquery-events,Javascript,Jquery,Javascript Objects,Jquery Events,我试图以一种简单易读的方式,使用Javascript代理对象来监听对象值的变化。我遵循了堆栈溢出问题和Mozilla。但我不明白如何做到这一点来实现我的目标 var-values={Value1:0,Value2:0}; var checkObjectChange=新代理(值,{}); log(“对象值为:”+JSON.stringify(值)) $(“#btn1”)。在(“单击”,函数(){ values.Value1=1; log(“现在对象值是:”+JSON.stringify(值));

我试图以一种简单易读的方式,使用Javascript
代理对象来监听对象值的变化。我遵循了堆栈溢出问题和Mozilla。但我不明白如何做到这一点来实现我的目标

var-values={Value1:0,Value2:0};
var checkObjectChange=新代理(值,{});
log(“对象值为:”+JSON.stringify(值))
$(“#btn1”)。在(“单击”,函数(){
values.Value1=1;
log(“现在对象值是:”+JSON.stringify(值));
});
$(“#btn2”)。在(“单击”,函数(){
值。值2=1;
log(“现在对象值是:”+JSON.stringify(值));
});
//我希望在对象值更改时调用函数
函数whenChange(){
log(“对象的值已更改!”);
}

更改值1

更改值2
您可以将处理程序函数传递给代理,您需要更改代理上的值,而不是原始对象上的值

var-values={Value1:0,Value2:0};
让处理程序={
设置:更改时的功能(对象、属性、值){
obj[prop]=值
log(“对象的值已更改!”);
返回真值
}
}
var checkObjectChange=新代理(值、处理程序);
log(“对象值为:”+JSON.stringify(checkObjectChange))
$(“#btn1”)。在(“单击”,函数(){
checkObjectChange.Value1=1;
log(“现在对象值是:”+JSON.stringify(checkObjectChange));
});
$(“#btn2”)。在(“单击”,函数(){
checkObjectChange.Value2=1;
log(“现在对象值是:”+JSON.stringify(checkObjectChange));
});

更改值1

更改值2
实际上需要将其指定给代理的属性。如果更改原始
对象,代理不会注意到。当然,你也必须为代理提供一些陷阱,否则它就没用了。很好,这就是我所期望的,有几个问题,是不是函数名
,在这种情况下需要更改时,可以没有名称?它是什么意思?如果您删除它并打印
,它与您使用的assing
obj[prop]=value
相同。在这种情况下,
var
let
之间的区别是什么?@SilverSurfer您可以使用任何名称,由您决定,
obj[prop]=value
用于设置目标对象的值,您可以在这里阅读更多内容,我没有使用
let
的习惯好的,谢谢,最后一个问题,您认为更干净吗
var checkObjectChange=newproxy(值,{//将代码处理程序直接放在这里})
而不是像您的示例那样定义一个单独的
let handler对象
?。有什么区别吗?@SilverSurfer没有区别,除非您在代码中的某个地方修改
处理程序
,而在后面的代码中,您无权访问
处理程序
,因此以后不能修改它