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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

function中bind綁定問題

function中bind綁定問題

白豬掌柜的 2019-03-12 17:15:22
在開發中遇到this指向問題,除了使用箭頭函數外,我想著能不能用bind來解決。我在用fn的建議寫法時綁定就出錯誤,使用傳統寫法就ok。MDN上也查不出問題在哪
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

第二種合法適因為滿足


{key:value}

的形式,value表示的范圍很大可以是很多合法語句,聲明、運算、賦值、iife...,function(){}.bind()就是合法語句;

第一種ES6的簡寫

可以理解成


{

    value,

    func(){}

}

被解析成


{

    value: value,

    func: function(){}

}

的形式,但是并不會把


    value + 1,

    func(){}.bind()

解析成


{

    value: value + 1,

    func: function(){}.bind()

}

的形式,換句話說,如果你那種形式合法


var a = {

    success(){},

    success(){}.bind({a:1}),

    success(){}.bind({a:2})

}

那你如何區分a.success


查看完整回答
反對 回復 2019-04-04
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

個人猜測:


{

    funcName(args...) {

        // ...

    }

}

這種是語法層面的 聲明方法 操作,編譯器能接受的只是 funcName(...) {...} 這么個結構, } 之后就不允許出現 . 這種行為了。



{

    funcName: funciton(args...) {

        //...

    }.bind(...) // 注意到 bind 返回的仍然是一個 function

}

這種是為 funcName 這個鍵賦值一個 Function 類型的匿名函數的值。


所以應該是語法層面的問題。


如有錯誤還請海涵 : )


查看完整回答
反對 回復 2019-04-04
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

var obj = {
func01: function() {},
func02() {}
};

這應該是兩種寫法上的區別
func01是在執行那一行的時候,function才定義的,當執行bind的時候function就已經定義好了,所以使用bind不會出錯,
而func02是在定義obj的過程中定義的,當執行到func02的時候,這時候函數的聲明有可能還沒執行完,所以這時候調用bind方法會報錯


查看完整回答
反對 回復 2019-04-04
  • 3 回答
  • 0 關注
  • 796 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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