在浏览器中的Javascript代码中,以下内容不总是正确的:此===窗口?
我有一个旧的JS应用程序,我需要为它实现一些新功能。 一些旧模块已经实现,如:在浏览器中的Javascript代码中,以下内容不总是正确的:此===窗口?,javascript,browser,webpack,Javascript,Browser,Webpack,我有一个旧的JS应用程序,我需要为它实现一些新功能。 一些旧模块已经实现,如: (function() { ... this.MyModule = MyModule; }).call(this); 这很有效。 现在我必须实现额外的模块,我想使用react来实现。我已更新了我的网页包配置,并在babel loader的预设中添加了“es2015”: { test: /(\.js|\.jsx)$/, exclude: /(node_modules)/, loader: 'ba
(function() {
...
this.MyModule = MyModule;
}).call(this);
这很有效。
现在我必须实现额外的模块,我想使用react来实现。我已更新了我的网页包配置,并在babel loader的预设中添加了“es2015”:
{
test: /(\.js|\.jsx)$/,
exclude: /(node_modules)/,
loader: 'babel',
query: {
presets: ['react', 'es2015']
}
}
现在我原来的模块不再加载了。
现在我在浏览器中运行代码时出现以下错误:
MyModule.js:185 Uncaught TypeError: Cannot set property 'MyModule' of undefined
对于这一行代码:
this.MyModule = MyModule;
这看起来就像在Javscript中,这将不再是窗口?
这是真的吗
如果我删除“es2015”预设,一切似乎都很好
有人能给我一个提示吗
谢谢,
Gerald我最终通过使用不同的网页加载程序定义解决了这个问题:我的旧文件加载程序不需要“es2015”预设,而我的新文件加载程序使用“es2015”预设。我最终通过使用不同的网页加载程序定义解决了这个问题:我的旧文件加载程序,我不需要“es2015”预设和另一个加载程序来加载我的新文件,而我使用的是“es2015”预设。是的,通过模块加载程序的工作方式和“严格使用”,它可以。如果您使用模块加载器,请使用它的机制导出内容,而不是将内容附加到
窗口
。除此之外,现在应该有一个变量global
。或者您更改})。调用(this)
到}()
@Thomas Ok,谢谢您的提示。是的,它可以,通过模块加载器的工作方式和“使用strict”。如果您使用模块加载器,请使用它的机制导出内容,而不是将内容附加到窗口
。除此之外,现在应该有一个变量global
。或者您更改了})。请将(this)
呼叫}()
@Thomas Ok,谢谢您的提示。