1. 程式人生 > >es6 class類中的this指向

es6 class類中的this指向

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 = {
            




    }
}