2016-09-17 42 views
0

我有這個倒計時定時器功能:打字稿函數返回NaN值,但數量型

startTimer(duration) { 
     this.myTimer = duration; 
     setInterval(function() { 
      this.myTimer--; 
      console.log("TIMER: "+ typeof(this.myTimer) + " "+this.myTimer); 
     }, 1000); 
    } 

,我以這種方式撥打電話:this.startTimer(60);

這是console.log結果:TIMER: number NaN。 所以typeof(this.myTimer)返回number類型,當我打印它的值時,我得到NaN

我爲什麼得到NaN

注:我使用Angular2(打字稿),我已經定義了組件類內部myTimer變量在這個簡單的方式構造的前面:

export class myComponent { 
myTimer; 
constructor(private navCtrl: NavController) {} 
// my code (previous function is here) 
} 
+4

'的typeof NaN'是'「號」' – Rayon

+0

你通常得到NaN當你做了手術的數量與其他typers像串。 Mayber你在其他地方將字符串變異爲字符串? – Kafo

+2

在'setInterval'處理函數中,'this-context'不是你所期待的... – Rayon

回答

2

人造絲一樣在評論中說,在你的setTimeout函數回調函數與您的startTimer函數中的this不同,因此myTimer不是它的成員。 undefined--操作後變成NaN

要解決它,你可以使用var that = this伎倆或使用arrow function

function startTimer(duration) { 
    this.myTimer = duration; 
    setInterval(() => { 
     this.myTimer--; 
     console.log("TIMER: "+ typeof(this.myTimer) + " "+this.myTimer); 
    }, 1000); 
}