【问题标题】:How to keep this keyword points to window object in webpack?如何让这个关键字指向 webpack 中的 window 对象?
【发布时间】:2019-06-30 11:02:19
【问题描述】:

我已经使用 webpack 和导入/导出语法将 AngularJS 应用程序转换为 es6。

除了 this 关键字之外,一切都很完美。

由于 webpack 在编译期间将我的所有代码包装到 iife 函数(模块)中,因此关键字 this 在以下函数中未定义:

.controller( …, function() {
 ...
 this.myFunc = function() {

  someFunction().then(function(data) {
   this.someVar = data;
   // this === window
  });

 });

});

在没有捆绑的普通角度应用程序中,这会得到window Object。

除了使用 webpack 之外,我不想做大的改变(我有很多代码地方都有)。有没有办法让this 指向 webpack 中的 window 对象?

【问题讨论】:

  • 您可以使用箭头函数代替:someFunction().then(data => { this.someVar = data; });。详情请见this
  • 不,我不想更改整个代码。只是在寻找将其设置为窗口的设置。
  • 用变量污染全局命名空间是非常糟糕的做法。它会导致名称冲突,从而产生难以解决的错误。

标签: angularjs webpack ecmascript-6 babeljs


【解决方案1】:

Webpack 确实强制代码使用“严格模式”。问题来自于使用 ES6 import 语句。

来自文档:

静态导入语句用于导入由另一个模块导出的绑定。导入的模块在 strict mode 中,无论您是否声明它们。

有关详细信息,请参阅

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多