在不指定 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);
}
考虑以下代码。
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);
}