javascript - 如何将一个类的所有方法绑定(bind)到javascript中的 'this'变量

标签 javascript class this

<分区>

我有一个 JavaScript 类 (MyClass),它公开了两个公共(public)函数(funA 和 funB),如下所示:

var MyClass = function(){
  this.funA = function(){
    console.log("function A");
    this.funB();
  };
  this.funB = function(){
    console.log("function B");
  };
};

var myObj = new MyClass();

请注意 funA 如何使用“this”关键字调用 funB。

以下作品:

myObj.funA();

但这不是:

var anonymousFun = function(fn){
  fn();
}
anonymousFun(myObj.funA);

原因是当 funA 使用“this”调用 funB 时,“this”被设置为全局上下文(而不是 MyClass)并且 funB 在全局级别不存在。 错误是:

Uncaught TypeError: this.funB is not a function

我试图避免该问题的最简单解决方案是在 MyClass 中使用变量“that”并将其初始化为“this”。然后,在 funA 中使用 that.funB 而不是 this.funB:

var MyClass = function(){
  var that = this;
  this.funA = function(){
    console.log("function A");
    that.funB();
  };
  this.funB = function(){
    console.log("function B");
  };
};

这是正确的方法吗? 有没有更好的解决方案?

最佳答案

如果您使用 Babel 编译 JS,您可以使用类属性初始化器语法来创建绑定(bind)到 this 的函数:

class MyClass {
  funA = () => {
    console.log('function A')
    this.funB()
  }

  funB = () => {
    console.log('function B')
  }
}

关于javascript - 如何将一个类的所有方法绑定(bind)到javascript中的 'this'变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51880810/

相关文章:

javascript - Mongoose/MongoDB - 引用另一个没有 ObjectId 的模式

javascript - jquery 提交不会阻止提交表单

javascript - 使用 Jasmine 根据参数值对 JS 回调进行 stub

java - 从监听器内部访问外部类?

javascript - 为什么在绘制实线时会在 Canvas 上看到奇怪的曲线?

javascript - JS 类和 OOJS

class - Powershell:创建类

node.js - 如何解决 Node 库(如异步和请求)的 'this' 问题

jquery - 我如何获取 jquery-ui 自动完成小部件的上下文?

c++ - 从父类(super class)对象数组调用子类方法