0

对于 javascript 中定义的设置器,我收到以下错误:“RangeError:超出最大调用堆栈大小”。

代码4如下:

设置器定义:

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

我无法弄清楚为什么它会无限循环?

4

2 回答 2

2

你打电话时

this._myList = list; 

它调用定义的setter,这会导致无限递归。

于 2012-07-06T07:10:20.363 回答
1

问题是您从 setter 中调用 setter ...

this._myList = list;

应该创建另一个“私有”变量来存储值。像这样的东西...

var _myInnerList;

this.__defineSetter__('_myList', function(list) {
  log.debug("in setter ....");  
  if(_myInnerList === list) {  
    log.debug("in setter..");    
    return;           
  }  
  _myInnerList = list;  
});  

还使用 === 进行比较(总是)并将__defineSetter更改为...

__defineSetter__
于 2012-07-06T07:14:28.353 回答