繁体   English   中英

使用defineSetter的javascript无限循环

[英]javascript infinite loop with defineSetter


我有以下代码 -

var obj = {
    name : "Yosy"
};

obj.__defineSetter__("name",function(v){
    alert(v);
});

问题是 -
如果我将obj.name更改为其他内容并将console.log(obj)更改为name属性的未定义。 所以我试着修复obj。 defineSetter到此 -

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;
});

设置属性时防止setter再次触发。

编辑:

对于任何感兴趣的人,这里有一些文档: https//developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Objects#Defining_Getters_and_Setters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM