javascript - 如何从 JS 文件中分配匿名函数
问题描述
希望每个人都会做得很好。
我正在开发一个使用fabric.js的项目,并且我有一个如下所示的JS文件:
(function(){
this.foo = 'bar';
this.bar = 'foo';
...........
...........
...........
...........
})();
现在,如果我想将上述脚本的结果存储到一个全局变量中,我该如何实现呢?
我要这个:
window.xyz = (function(){
this.foo = 'bar';
this.bar = 'foo';
...........
...........
...........
...........
})();
但是,正如我所说,这段代码在一个单独的 JS 文件中,我该如何实现呢?
解决方案
你不能直接做你说你想做的事,除非你可以改变另一个文件,以便它把结果放在你的全局中或导出它的结果等。
间接方法是将文件作为字符串读取,在字符串return
的开头添加,然后通过以下方式将其转换为代码new Function
:
window.xyz = new Function("return " + theFileContents)();
我不建议这样做,除非您可以绝对信任文件的内容(就像您信任通过import
或加载的文件一样require
)。如果您可以信任它,这可行,但这是一种解决方法。
真正的解决方案是修改其他文件。
你说过这是在浏览器中。这意味着您可以使用fetch
加载其他文件:
fetch("./the-other-file.js")
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error ${response.status}`);
}
return response.text();
})
.then(code => {
window.xyz = new Function("return " + code)();
})
.catch(error => {
// ...handle/report error...
});
那就是信任该文件的内容,就像<script src="./the-other-file.js"></script>
您的 HTML 一样。
推荐阅读
- c++ - 如何删除派生类中基类对象的新对象?
- google-cloud-pubsub - Stackdriver 中的图表与配置阈值之间是否存在差异?
- haskell - 迭代自定义类型并访问haskell中的属性
- c# - Codility 不编译包含 HashSet 和 lambda 的 C# 和 VB 代码
- php - 在 PHP 中生成和存储未转义的字符串
- javascript - Javascript对象可以在构造过程中调用自己的方法吗?
- python - 很难单击激活下拉菜单的单选按钮。使用 Selenium 和 Python
- javascript - var vs let in node(模块范围)
- javascript - 加入时未调用 Discord.js guildMemberAdd 事件
- r - R从TripAdvisor的多个页面中抓取评论