试图在一个对象数组中实现一个数组

时间:2013-01-29 15:38:33

标签: javascript google-apps-script iife

在Google Apps JS中。我想实现一个对象数组,每个对象都有属性和方法。其中一个属性需要是一个对象数组,我希望能够通过使用父数组中的方法来访问此数组。

到目前为止,我的最大努力是:

function myFunction () {
  var teamNo = 3;
  var allNames =["n1","n2","n3","n4"] ;
  var createnames = function () {
    var names = [];            
    for ( var j = 0; j <=3 ; j ++) {      
      (function (j) {
        var localNames = ["local1-names"+j,"local2-names"+j];
        names[j] = (function (player){
          return {
            namArr: localNames,
            name:   allNames[j],         
            addName: (function (player){
              localNames.push(player);
            }) (player),
             team:   teamNo            
          };         
        });
      }) (j);
    }
    return names;
  }
  var myname = createnames();
  var foo = myname[0]().namArr;
  var foo1 = myname[1]().namArr;
  myname[1]().addName("added");
  var foo2 = myname[1]().namArr;
  var foo3 = myname[2]().namArr;
  var debug = true;
}

当我添加代码来实现子数组时,我得到一个运行时错误,说addName不存在。

1 个答案:

答案 0 :(得分:2)

您立即调用此方法:

addName: (function (player) {
    localNames.push(player);
})(player)

而不是分配它:

addName: function (player) {
    localNames.push(player);
}

此外,每个names[]函数都需要playeraddPlayer()函数也是如此,这使得names[]参数无法访问。如果您不打算将任何内容传递给names[]函数,请删除参数。

我建议使用命名函数而不是内联IIFE。