无法将Object.assign添加到Google表格

时间:2019-01-20 23:54:18

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

我在Google表格中的utils.gs文件中添加了类似的内容:

Object.assign = function (target, source){
  if (!target || !source)
    throw new Error("Invalid arguments.");
  for (var property in source)
    if (source.hasOwnProperty(property))
      target[property] = source[property];
};

在同一脚本文件中,我定义了一个依赖于Object.assign的函数,但始终收到错误消息:

  

TypeError:在对象函数Object()中找不到分配的函数{   [Object.Object的本机代码,arity = 1]}。

我为什么不能添加它?

1 个答案:

答案 0 :(得分:0)

这是模块系统中的某种错误。

此代码有效:

main.gs

Object.assign = function (target, source){
  if (!target || !source)
    throw new Error("Invalid arguments.");
  for (var property in source)
    if (source.hasOwnProperty(property))
      target[property] = source[property];
  return target;
};

Logger.log(Object.assign({}, {a:1}));

function main(){
  Logger.log(Object.assign({}, {a:1}));
}

但是如果我将Object.assign移到一个单独的文件中:

main.gs

Logger.log(Object.assign({}, {a:1}));

function main(){
  Logger.log(Object.assign({}, {a:1}));
}

assign.gs

Object.assign = function (target, source){
  if (!target || !source)
    throw new Error("Invalid arguments.");
  for (var property in source)
    if (source.hasOwnProperty(property))
      target[property] = source[property];
  return target;
};

然后只有第二个Object.assign()有效,这在main()函数中被调用。如果我定义并调用assign(),那么两者都可以。

请注意,这通常不是问题,因为您通常不会将两行都添加到main.gs中。如果您使用实用程序功能来帮助原型创建,那么最好将每个构造函数和原型定义移到一个单独的文件中,而不是在main.gs中进行定义。这样,您就不会出现此类问题,并且即使在其他实用程序功能和定义中也可以使用Object.assign