Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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_Setter_Getter_Defineproperty - Fatal编程技术网

对象值的Javascript设置器

对象值的Javascript设置器,javascript,setter,getter,defineproperty,Javascript,Setter,Getter,Defineproperty,我创建了一个“set”函数,它将在对象“myObject.user”的值更改期间触发该函数。因此,当我更改值时,我会变得警惕。但是,当我更新对象“myObject.newuser[0].id”内的值时,集合没有调用。如何更改代码,以便在更改任何内部值时,全局集都可以工作。ie对于这个代码,我应该得到两个警告 var myObject={}; myObject.user; Object.defineProperty(myObject,'newuser'{ get:function(){返回thi

我创建了一个“set”函数,它将在对象“myObject.user”的值更改期间触发该函数。因此,当我更改值时,我会变得警惕。但是,当我更新对象“myObject.newuser[0].id”内的值时,集合没有调用。如何更改代码,以便在更改任何内部值时,全局集都可以工作。ie对于这个代码,我应该得到两个警告

var myObject={};
myObject.user;
Object.defineProperty(myObject,'newuser'{
get:function(){返回this.user;},
set:function(value){alert('Updated');this.user=value;}
});
myObject.newuser=[{“id”:“user1”}];

myObject.newuser[0].id=“user2”
您需要将属性
myObject.newuser[0].id
更改为
myObject.user[0].id
,然后它会将新值设置为现有用户的值

因为您可以使用新值更改以前添加的值


有关setter的更多详细信息,请参阅。

您正在更改内部对象,这当然不会触发setter。我建议使用setter接口实现数据结构。这会更简单。