箭頭函式所遇到的小小問題
阿新 • • 發佈:2018-12-19
直接上程式碼
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不能被修改
所有不是所有的東西都要用箭頭函式表示,視情況而定