請(qǐng)問(wèn)這里的this指什么?
我已經(jīng)理解了next("左運(yùn)動(dòng)參數(shù)")(馬車開(kāi)始向左運(yùn)動(dòng)).then("轉(zhuǎn)向參數(shù)")(馬車轉(zhuǎn)向).then("右運(yùn)動(dòng)參數(shù)")(馬車開(kāi)始向右運(yùn)動(dòng)).then()(馬車停止)這種方式。
請(qǐng)問(wèn)這里的1,2,3號(hào)this分別指的是什么?
這里的邏輯怎么樣的?如果讓我寫(xiě),我怎么知道這樣去寫(xiě),因?yàn)檫@里很不符合初學(xué)者思維習(xí)慣。
這里的callback干什么用?
這里的this為什么要存到that去?
如果不用that保存this,那么this的引用會(huì)在哪被更改?
2017-12-27
2樓說(shuō)的不錯(cuò).
我補(bǔ)充幾點(diǎn)
先說(shuō)下apply()函數(shù)
關(guān)于 this 關(guān)鍵字 參考此鏈接
http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
我們分析一下var next = function(){...}這個(gè)函數(shù)
?第一個(gè)和第二個(gè)this都在next()函數(shù)的內(nèi)部
而第三個(gè)this就不在next()的內(nèi)部,而是屬于pageA.prototype.run = function(callback){...}這個(gè)函數(shù)內(nèi)部了.
而next()函數(shù)是全局對(duì)象global或window的方法,所以在next()函數(shù)內(nèi)部的this就是指向他們了
而pageA.prototype.run = function(callback){...}這個(gè)函數(shù)內(nèi)部的this是如下傳遞過(guò)來(lái)的
如果我們給這個(gè)實(shí)例對(duì)象命個(gè)名
那么第三個(gè)this就是由
this.run(); 傳遞過(guò)來(lái)的something對(duì)象了
我們?cè)倏?em>bind()函數(shù)
由此,我們可以得出結(jié)論
bind()函數(shù) 綁定的是參數(shù)的值,而不是實(shí)際變量的值。
再看這個(gè)例子
由此,我們可以得出結(jié)論
bind()函數(shù) 改變了this的指向
綜上
我們完全可以這樣寫(xiě)
就目前的情況也可以這樣寫(xiě)
2017-12-27
再補(bǔ)充一下....
突然發(fā)現(xiàn)有一點(diǎn)沒(méi)說(shuō)
就是為什么要多此一舉聲明另一個(gè)next()函數(shù),然后用apply()和bind()函數(shù)來(lái)將對(duì)象轉(zhuǎn)移呢?
我猜測(cè)啊,應(yīng)該是避免異步導(dǎo)致的參數(shù)賦值混亂.我猜的哈
總之這樣寫(xiě)應(yīng)該是有其作用的
因?yàn)槲衣?tīng)說(shuō)過(guò)一句話:任何編程方面的問(wèn)題,都可以通過(guò)添加一個(gè)中間件的方式得到解決.
2017-12-27
再補(bǔ)充一下 callback 是回調(diào)函數(shù) 目前沒(méi)用? 刪掉也沒(méi)關(guān)系
下節(jié)應(yīng)該會(huì)用到
2017-09-28
第三個(gè)this指向的是構(gòu)造函數(shù)pageA new出的對(duì)象,也就是對(duì)象本身。
第一個(gè)和第二個(gè)this本應(yīng)指向window,但被bind改變了指向,所以也指向?qū)ο蟊旧怼?/p>