在javascript中定义getter和setter

时间:2012-07-06 06:57:35

标签: javascript

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

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

2 个答案:

答案 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__