我在javascript中定义的setter遇到以下错误:“RangeError:超出了最大调用堆栈大小”。
code4如下:
setter defn:
this.__defineSetter('_myList', function(list)
{
log.debug("in setter ....");
if(this._myList == list)
{
log.debug("in setter..");
return;
}
this._myList = list;
});
呼叫:
myMethod = function(msg)
{
try
{
this.myList = msg.myList;
}catch(e)
{
log.debug("error in calling setter... " + e);
}
}
我无法弄清楚为什么会无限循环?
答案 0 :(得分:2)
致电时
this._myList = list;
它调用定义的setter,这会导致无限递归。
答案 1 :(得分:1)
问题是你在setter中调用了setter ......
this._myList = list;
应该创建另一个'private'变量来存储值。像这样......
var _myInnerList;
this.__defineSetter__('_myList', function(list) {
log.debug("in setter ....");
if(_myInnerList === list) {
log.debug("in setter..");
return;
}
_myInnerList = list;
});
还可以使用===进行比较(总是)并将__defineSetter更改为...
__defineSetter__