在不指定 this 的情况下调用存储在变量中的方法

Call method stored in variable without specifying this

考虑以下代码。

class Foo {
  num = 0;
  bar = function(arg) {
    console.log(this.num + arg);
  }
}

const foo = new Foo();
const bar = foo.bar;

foo.bar(1);

bar(2);

bar.call(foo, 3);

foo.bar(1); 日志 1.

bar(2); 抛出 Uncaught TypeError: Cannot read property 'num' of undefined.

bar.call(foo, 3); 日志 3.

有没有办法将函数 foo.bar 存储在一个变量中,这样就可以在不指定 this 对象的情况下调用它?

我知道以下方法可行。

const foobar = function(arg) {
  foo.bar(arg);
}

有没有办法避免创建中介函数?我想将方法​​作为参数传递给另一个函数,而必须创建大量中间函数确实会降低代码的可读性。

是的,有!您可以使用 .bind()。这是一个例子:

class Foo {
  num = 0;
  bar = function(arg) {
    console.log(this.num + arg);
  }
}

const foo = new Foo();
const bar = foo.bar.bind(foo);

bar(2);

用箭头函数定义字段;这将使 this 引用实例:

bar = (arg) => {
  console.log(this.num + arg);
}