我有以下代码 -
var obj = {
name : "Yosy"
};
obj.__defineSetter__("name",function(v){
alert(v);
});
Run Code Online (Sandbox Code Playgroud)
问题是 -
如果我将obj.name更改为其他内容并将console.log(obj)更改为name属性上的未定义.所以我试着修复obj.defineSetter到此 -
var obj = {
name : "Yosy"
};
obj.__defineSetter__("name",function(v){
alert(v);
this.name = v;
});
Run Code Online (Sandbox Code Playgroud)
如果您将名称更改为"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;
});
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
var obj = {
fields: {
name : "Yosy"
}
};
obj.__defineSetter__("name",function(v){
alert(v);
this.fields.name = v;
});
obj.__defineGetter__("name",function() {
return this.fields.name;
});
Run Code Online (Sandbox Code Playgroud)
设置属性时防止setter再次触发.
编辑:
对于任何感兴趣的人,这里有一些文档:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Objects#Defining_Getters_and_Setters
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |