2 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
箭頭函數(shù)自動(dòng)綁定父作用域的上下文。但regular function
默認(rèn)情況下不這樣做。為了更改常規(guī)函數(shù)的上下文,您可以使用bind
下面示例中的方法。
this.timer = window.setInterval(function() { this.setState({ date: new Date() }) }.bind(this), 1000)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
這不完全是因?yàn)?newthis
是為常規(guī)函數(shù)創(chuàng)建的(順便說一句,不要混淆上下文和this
),常規(guī)函數(shù)的規(guī)則this
是:
在構(gòu)造函數(shù)的情況下是一個(gè)新對(duì)象
undefined in functions call in strict mode
如果函數(shù)作為方法調(diào)用,則為當(dāng)前對(duì)象
你的情況是第三種,但訣竅是當(dāng)使用setInterval
or時(shí)setTimeout
,回調(diào)函數(shù)作為方法調(diào)用,但在全局范圍內(nèi)(this
== window
)。
經(jīng)典的方法是保存this
在一個(gè)變量中。因?yàn)樵摵瘮?shù)可以訪問創(chuàng)建它的上下文,所以它會(huì)記住這個(gè)變量:
var self = this;
this.timer = window.setInterval(function() {
self.setState({ date: new Date() })
}, 1000)
您也可以使用bind
添加回答
舉報(bào)