无法创建变量参数iterator&装饰类(高级)

时间:2013-03-05 00:31:01

标签: javascript iterator decorator

我有一个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最大调用堆栈达到错误,因此,我不是手动使用for..in循环进行迭代,而是试图设想一个helper迭代器类以及装饰器模式,所以当我做args.get(0)args.foreach(function(){})时,我得到'转换'的PF对象(这是一个得到评估的内联函数)。问题是,有时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}
            ]
          }
        }
      ]
    }
  ]
});

我的脑子已经短路了,试图设想这个迭代器/装饰器类。

0 个答案:

没有答案