亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

這段代碼看不懂,求解答一下

var that = this; ? ?var next = function(){ ? ? ? ?return this.next.apply(that,arguments) ? ?}.bind(this) 這段代碼實現的是什么功能,看不懂,有大神解答一下嗎

正在回答

3 回答

pageA.prototype.run?=?function(callback){
????var?that?=?this;
????var?next?=?function()?{
????????return?that.next.apply(that,?arguments)
????}.bind(that);

這樣好理解一點,其實這里this,that都一樣,因為next方法在下面馬上要調用了,所以在這個方法內作用域this和that都一樣;這個this指代的是pageA()的實例,next()函數的意思就是,調用pageA()的next方法作用與新的對象上(但that還是pageA本身),并且使用新的參數;然后再將返回的方法改變一下指針,變成that(但還是pageA本身),然后運行下。

pageA.prototype.run?=?function(callback){
????var?that?=?this;
????var?next?=?function()?{
????????return?this.next.apply(this,?arguments)
????}.bind(this);

用人話說就是,bind的this(你當成that好了,就是外層函數的this)代替了next匿名函數中的this,然后在調用變成that的next方法作用于that自身并且使用next匿名函數的新參數。

var?that?=?this;
var?next?=?function(op)?{
????????return?that.next(op);?
????};

所以你發現,我把代碼改成上面這樣竟然也能完美運行!無非就是調用了一下pageA的next方法嘛!

所以作者只是在花樣曬技術,被玩死的內存君表示哭暈在廁所。

var?next?=?function(op)?{
????????return?this.next(op);?
????}.bind(this);

你還可以這樣玩。


這是個玩弄指針和顛來倒去apply、bind的問題,對了,還有一個call方法。

2 回復 有任何疑惑可以回復我~
#1

qq_深_2 提問者

非常感謝!
2016-02-06 回復 有任何疑惑可以回復我~
#2

zhongkeyuan

因為next方法在下面馬上要調用了,所以在這個方法內作用域this和that都一樣.這怎么理解?????
2016-06-11 回復 有任何疑惑可以回復我~
#3

葛金秋

把把var next = function(){ return this.next.apply(that,arguments) }.bind(this)去掉。在next前面加that.next也是可以的。不知道大神知道為什么嗎?
2016-10-05 回復 有任何疑惑可以回復我~

對于argument,請看官方文檔:http://www.w3school.com.cn/js/pro_js_functions_arguments_object.asp

0 回復 有任何疑惑可以回復我~

這個課程的作者真的各種炫,完全不考慮實際的方便。

1 回復 有任何疑惑可以回復我~
#1

em_heqian

哈哈 正好讓你看到不懂的時候可以自己去學習
2016-11-28 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
H5+JS+CSS3 實現圣誕情緣
  • 參與學習       122112    人
  • 解答問題       233    個

為圣誕節準備的H5+JS+CSS特效案例教程,實現靜與動的結合

進入課程

這段代碼看不懂,求解答一下

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號