0

javascriptで定義されたセッターに対して次のエラーが発生します:「RangeError:最大呼び出しスタックサイズを超えました」。

code4は次のとおりです。

セッター定義:

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; 

定義されたセッターを呼び出し、無限再帰を引き起こします。

于 2012-07-06T07:10:20.363 に答える
1

問題は、セッター内からセッターを呼び出すことです...

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 に答える