浏览器化模块中的“this”上下文

'this' context in browserify modules

本文关键字:this 上下文 模块 浏览器      更新时间:2023-09-26

在一个简单的browserify应用程序中,我想使用 this 关键字来引用导出对象中的其他函数,但它似乎没有像我期望的那样工作:

(function() {
  module.exports = {
    a: function() {
      console.log('Hello World');
    },
    b: function() {
      this.a(); // Problem: this is set to window.document
    }
  };
})();

我以为上面的代码会起作用,但似乎this设置为window.document而不是导出的对象。我很确定我过去有过这个工作,所以它可能很简单,但我有点坚持下去!

我知道我可以将对象本身导出到 window ,或者使其成为可以引用的命名变量,但我想了解为什么上面的代码不起作用。

非常感谢!

要将"this"设置为对象,您需要将此函数作为对象属性调用,例如 foo.a() 或使用调用/应用显式设置"this" bar.a.apply(foo,[args])

你快到了。 将您的代码更改为下面,它可以工作。

(function () {
   var module = new Object();
   module.exports = {
        a : function () {
            console.log('Hello World');
        },
        b : function () {
            this.a();
        }
   };
   module.exports.b();
})();