es6 class類中的this指向
阿新 • • 發佈:2019-01-08
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 = {
}
}