this指向
类的方法内部如果有this,默认指向类的实例。 但单独使用该方法时,很可能会报错。
class Logger{
printName(name = 'there'){
this.print(`hello ${name}`);
}
print(text){
console.log(text);
}
}
const logger = new Logger(); //实例化
const {printName } = logger; //printName
printName(); // 报错 VM77:3 Uncaught TypeError: Cannot read property 'print' of undefined
printName方法中的this ,默认指向Logger类的实例化对象,但如上单独使用的时候,this会指向该方法运行时指向的环境(此时的运行环境是window吗?我在window下添加了print方法后还是同样报错(___________)),因为找不到print方法而报错。
解决方案:
1. 在构造方法中绑定this,这样实例化时 this就会指向当前实例
class Logger{
constructor(){
this.printName = this.printName.bind(this);
}
//...
}
2.使用箭头函数
class Logger{
constructor(){
this.printName = (name = 'there') => {
this.print(name);
}
}
}
3.使用 Proxy, 获取方法的时候,自动绑定this
(回头看Proxy时候补上)
function selfish(target){
const cache = new WeakMap();
const handler = {
}
}