1. 程式人生 > >箭頭函式所遇到的小小問題

箭頭函式所遇到的小小問題

直接上程式碼

Timer=()=>{
    this.s1 = 0;
    this.s2 = 0;
    // 箭頭函式
    setInterval(() => this.s1++, 1000);
    // 普通函式
    setInterval(function () {
        this.s2++;
    }, 1000);
}
let timer=new Timer();

為什麼會報錯呢?

箭頭函式注意點

函式體內的this物件,就是定義時所在的物件,而不是使用所在的物件
不可以當作建構函式,就是說不能new
不可以使用arguments
不可以使用yield
也就是說,this物件的指向是可變的,但是在箭頭函式中,this的指向是固定的

只需要把最外層寫成函式就行了

function Timer() {
    this.s1 = 0;
    this.s2 = 0;
    // 箭頭函式
    setInterval(() => this.s1++, 1000);
    // 普通函式
    setInterval(function () {
        this.s2++;
    }, 1000);
}

第二點由於普通的函式的this指向的是window,所有s2不能被修改
所有不是所有的東西都要用箭頭函式表示,視情況而定