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}/*...*/]
});

其中,该对象中的属性数量在每个请求中都是可变的,并且其内容c和内容a是未知的。有时,里面a会有一些特殊的对象,需要转换,比如:

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

递归地执行它,以“处理”所有参数,有时在 Webkit 中会导致 RangeError 最大调用堆栈达到错误,因此,for..in我不是使用循环手动迭代,而是尝试与装饰器模式一起构思一个辅助迭代器类,所以当我这样做args.get(0)args.foreach(function(){})我得到“转换”的 PF 对象(这是一个被 eval 引导的内联函数)时。问题是,有时a部分是这样的(为了更清晰的可视化而缩进):

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

由于生成代码的动态特性,它会导致PF变量出现一些“不一致”。当类型为 'PR' 时,它za. 像这样:

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

我的脑袋短路了,已经在尝试构思这个迭代器/装饰器类了。

4

0 回答 0