Javascript 在对象字面量上调用 eval(带函数)

标签 javascript import eval google-apps-script

免责声明:我完全理解使用 eval 的风险/缺点,但这是一个我找不到任何其他方法的小众案例。

在 Google Apps 脚本中,仍然没有将脚本作为库导入的内置功能,因此许多工作表可以使用相同的代码;但是, 有一个内置工具,我可以在其中从纯文本文件导入文本。

这是评估代码:

var id = [The-docID-goes-here];
var code = DocsList.getFileById(id).getContentAsString();
var lib = eval(code);
Logger.log(lib.fetchDate());

这是我在外部文件中使用的一些示例代码:

{
  fetchDate: function() {
    var d = new Date();
    var dateString = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getFullYear();
    return dateString;
  }
}

我的目标是将一个大对象文字(包含所有库代码)放到一个局部变量上,这样我就可以引用它的属性/函数,就像它们包含在它们自己的命名空间中一样。

最佳答案

var lib = eval(code); 替换为:

var lib = eval('(' + code + ')');

当省略括号时,大括号被解释为代码块的标记。因此,eval 的返回值是 fetchData 函数,而不是包含该函数的对象。

当缺少函数名称时, block 内的代码将被读取为带标签的匿名函数语句,这是无效的。

加上括号后,花括号作为对象字面量(如预期的那样),eval 的返回值是一个对象,使用fetchData 方法。然后,您的代码将起作用。

关于Javascript 在对象字面量上调用 eval(带函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949274/

相关文章:

javascript - 使用自己的方法创建函数

sql - PostgreSQL 导入不起作用

r - lm.fit(x,y,offset = offset, single.ok,...) 中的错误 0 个使用 boxcox 公式的非 NA 情况

javascript - 如何获取文本区域的值?

javascript - 诺基亚 HERE map : Remove circle

javascript - div 中的内容重叠

python - 为什么模块在本地导入时有时会引发 UnboundLocalError?

javascript - 使用systemjs模块导入navigo

javascript 评估用户提交的简单数学node.js

javascript - 如何在 Node.js 中安全地执行未知的 Javascript 代码?