0

オブジェクトを引数として受け取る Javascript クラスがあります。

function convertible(args){
  var self = this;
  $.extend(self, {
    /* many functions that manipulate data */
  });
}

通常、このクラスは、この構造を持つオブジェクトで呼び出されます

var result = new convertible({
  'x':[{'a':[/*...*/],'c':'asdf'}/*...*/],
  'y':[{'a':[/*...*/],'c':10}/*...*/],
  'z':[{'a':[/*...*/],'c':255},{'a':[],'c':255}/*...*/]
});

このオブジェクトのプロパティの数はリクエストごとに可変であり、 と の内容ca不明です。内部aには、次のような変換が必要な特別なオブジェクトがある場合があります。

var result = new convertible({
  'z':[{'a':[0, {'PF':/*string to be eval'led*/}],'c':255}]
});

すべての引数を「処理」するために再帰的に実行すると、Webkit で RangeError Maximum Call Stack reached エラーが発生する場合があるため、for..inループを使用して手動で反復する代わりに、デコレーター パターンとともにヘルパー イテレーター クラスを考えようとしています。 、だから私がそうするargs.get(0)args.foreach(function(){})、「変換された」PFオブジェクトを取得すると(これはeval'ledを取得するインライン関数です)。問題は、aパーツが次のようになる場合があることです (より明確な視覚化のためにインデントされています)。

var result = new convertible({
  'z':[
    { 
      'a':[
        [{'PF':/*string to be eval'led*/}],
        {'PF':{/*another object that MIGHT have PF inside*/}}
      ]
    }
  ]
});

生成されたコードの動的な性質のため、PF変数に「矛盾」が生じます。タイプが 'PR' の場合は、z内にネストされたオブジェクトaです。このような:

var result = new convertible({
  'z':[
    { 
      'a':[
        {
          'PR': {
            'z': [
              {'a': [/*...*/], 'c': 0}
            ]
          }
        }
      ]
    }
  ]
});

このイテレータ/デコレータ クラスを考えようとして、頭がショートしました。

4

0 に答える 0