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