【问题标题】:Is there a way to make a dictionary of methods for an object with JavaScript in Apps Script?有没有办法在 Apps Script 中使用 JavaScript 为对象制作方法字典?
【发布时间】:2015-01-27 19:07:15
【问题描述】:

我正在尝试为使用电子表格创建表单的 Google 表格制作脚本。如图所示,我将工作表的列(加载到对象“dataObject”中)中的值传递到对象数组中。

  for (var i = 0; i < dataObject.length; i++)
  {
      dataObjectArray[i] = {
          question:    dataObject[i][3],
          type:        dataObject[i][4],
          help:        dataObject[i][5],
          choices:     dataObject[i][6],
          options:     dataObject[i][7],
          validation:  dataObject[i][8]
      }
  }

然后我的目标是使用每个对象的“问题”属性在我的 Google 表单中创建一个新项目。我遇到的问题是,根据问题类型,制作表单需要完全不同的方法。

我尝试的第一件事是制作一个这样的函数字典:

 var form = FormApp.create('Foo'); 
 var formDictionary = {
    "Text": function(){form.addTextItem();},
    "Paragraph Text": function(){form.addParagraphTextItem();},
    "Multiple Choice": function(){form.addMultipleChoiceItem();},
    "Checkboxes" : function() {form.addCheckboxItem();},
    "Choose from a list": function(){form.addListItem();},
    "Scale": function(){form.addScaleItem();},
    "Grid": function(){form.addGridItem();},
    "Date": function(){form.addDateItem();},
    "Time": function(){form.addDateTimeItem();}
  };

然后我会这样调用表单创建函数:

   for (var i = 1; i < dataObjectArray.length; i++){
    formDictionary[dataObjectArray[i].question]();
  }

目前,我收到以下错误: TypeError: Cannot find function undefined in object [object Object]. (line 113, file "Code")

我知道我尝试过的方法可能不止几个问题(我自己也发现了一些),但我找不到更好的解决方案。

如果可能,我希望避免使用 switch 语句,但如果它们是我唯一的选择,我会使用它们。

【问题讨论】:

  • 使用Logger.log() 语句将信息打印到LOG。然后从菜单中选择查看、日志。检查值是否符合您的预期。我们需要知道您的期望与您得到的相比。
  • @SandyGood 我实际上一直在这样做,但没有从中获得任何有用的信息。我可以告诉你,第一个 for 循环中的 dataObjectArray 已正确加载。在我添加最后的for 循环之前,脚本运行良好。另外,我已将错误描述添加到问题中。
  • 错误信息表明函数未定义。函数是question(),也是对象中的一个属性。所以问题可能出在dataObjectArray 对象上。如果dataObjectArray 不是全局变量,并且调用dataObjectArray 的函数位于不同的函数中,则dataObjectArray 中的数据可能已丢失。您是否在定义它的同一函数中调用 dataObjectArray 对象?

标签: javascript google-apps-script google-sheets google-forms


【解决方案1】:

使用 javascript 原型。

function MyFunction(){
  return
}

MyFunction.prototype = {
  test1:(function(){return "Hello"}),
  test2:(function(){return "World"}),
}
var foo =  new MyFunction();
Logger.log(foo.test1() +" "+ foo.test2())

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 2023-03-08
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多