带defineSetter的javascript无限循环
带defineSetter的javascript无限循环,javascript,Javascript,我有以下代码- var obj = { name : "Yosy" }; obj.__defineSetter__("name",function(v){ alert(v); }); 问题是- 如果我将obj.name更改为其他内容,并将console.log(obj)更改为name属性的未定义项。 所以我试着修复obj。定义设置 var obj = { name : "Yosy" }; obj.__defineSetter__("name",function(v)
我有以下代码-
var obj = {
name : "Yosy"
};
obj.__defineSetter__("name",function(v){
alert(v);
});
问题是-如果我将obj.name更改为其他内容,并将console.log(obj)更改为name属性的未定义项。 所以我试着修复obj。定义设置
var obj = {
name : "Yosy"
};
obj.__defineSetter__("name",function(v){
alert(v);
this.name = v;
});
如果您将名称更改为“ABC”或其他名称,您将得到一个无限循环,因为在defineSetter中,我正在设置属性“name”的值怎么办?好吧,如果您希望能够像正常情况一样使用
name
属性,并且仍然会提醒该值,那么您应该以不同的方式命名对象字段,如下所示:
var obj = {
_name : "Yosy"
};
obj.__defineSetter__("name",function(v){
alert(v);
this._name = v;
});
obj.__defineGetter__("name",function() {
return this._name;
});
var obj = {
fields: {
name : "Yosy"
}
};
obj.__defineSetter__("name",function(v){
alert(v);
this.fields.name = v;
});
obj.__defineGetter__("name",function() {
return this.fields.name;
});
或者像这样:
var obj = {
_name : "Yosy"
};
obj.__defineSetter__("name",function(v){
alert(v);
this._name = v;
});
obj.__defineGetter__("name",function() {
return this._name;
});
var obj = {
fields: {
name : "Yosy"
}
};
obj.__defineSetter__("name",function(v){
alert(v);
this.fields.name = v;
});
obj.__defineGetter__("name",function() {
return this.fields.name;
});
防止设置程序在设置属性时再次触发
编辑:
对于任何感兴趣的人,这里有一些文档:+1,只是为了添加另一个资源,在变量名的约定之前我不知道整个下划线…修复了我的无限循环问题,谢谢!