调用方法存储在变量中而不指定此

时间:2019-03-24 21:58:38

标签: javascript function methods this method-call

请考虑以下代码。

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);
}

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

2 个答案:

答案 0 :(得分:1)

是的,有!您可以使用.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);

答案 1 :(得分:1)

使用箭头功能定义字段;将使this引用实例:

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