注意class中this指向问题

1,045 阅读1分钟

类的方法内部如果含有this,它默认指向类的实例。但是,必须非常小心,一旦单独使用该方法,很可能报错。

class Logger {

printName(name = 'there') {

this.print(`Hello ${name}`);

}

print(text) { console.log(text); } }

const logger = new Logger();

const { printName } = logger;

printName(); // TypeError: Cannot read property 'print' of undefined

上面代码中,printName方法中的this,默认指向Logger类的实例。但是,如果将这个方法提取出来单独使用,this会指向该方法运行时所在的环境(由于 class 内部是严格模式,所以 this 实际指向的是undefined),从而导致找不到print方法而报错。

一个比较简单的解决方法是,在构造方法中绑定this,这样就不会找不到print方法了。

class Logger {

constructor() {

this.printName = this.printName.bind(this);

}

// ...

}