鍍金池/ 問(wèn)答/HTML/ function中bind綁定問(wèn)題

function中bind綁定問(wèn)題

在開(kāi)發(fā)中遇到this指向問(wèn)題,除了使用箭頭函數(shù)外,我想著能不能用bind來(lái)解決。我在用fn的建議寫(xiě)法時(shí)綁定就出錯(cuò)誤,使用傳統(tǒng)寫(xiě)法就ok。MDN上也查不出問(wèn)題在哪
圖片描述

圖片描述

回答
編輯回答
半心人

個(gè)人猜測(cè):

{
    funcName(args...) {
        // ...
    }
}

這種是語(yǔ)法層面的 聲明方法 操作,編譯器能接受的只是 funcName(...) {...} 這么個(gè)結(jié)構(gòu), } 之后就不允許出現(xiàn) . 這種行為了。

{
    funcName: funciton(args...) {
        //...
    }.bind(...) // 注意到 bind 返回的仍然是一個(gè) function
}

這種是為 funcName 這個(gè)鍵賦值一個(gè) Function 類(lèi)型的匿名函數(shù)的值。

所以應(yīng)該是語(yǔ)法層面的問(wèn)題。

如有錯(cuò)誤還請(qǐng)海涵 : )

2018年5月17日 13:40
編輯回答
故林

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

這應(yīng)該是兩種寫(xiě)法上的區(qū)別
func01是在執(zhí)行那一行的時(shí)候,function才定義的,當(dāng)執(zhí)行bind的時(shí)候function就已經(jīng)定義好了,所以使用bind不會(huì)出錯(cuò),
而func02是在定義obj的過(guò)程中定義的,當(dāng)執(zhí)行到func02的時(shí)候,這時(shí)候函數(shù)的聲明有可能還沒(méi)執(zhí)行完,所以這時(shí)候調(diào)用bind方法會(huì)報(bào)錯(cuò)

2018年3月13日 21:38
編輯回答
陌如玉

第二種合法適因?yàn)闈M(mǎn)足

{key:value}

的形式,value表示的范圍很大可以是很多合法語(yǔ)句,聲明、運(yùn)算、賦值、iife...,function(){}.bind()就是合法語(yǔ)句;
第一種ES6的簡(jiǎn)寫(xiě)
可以理解成

{
    value,
    func(){}
}

被解析成

{
    value: value,
    func: function(){}
}

的形式,但是并不會(huì)把

    value + 1,
    func(){}.bind()

解析成

{
    value: value + 1,
    func: function(){}.bind()
}

的形式,換句話說(shuō),如果你那種形式合法

var a = {
    success(){},
    success(){}.bind({a:1}),
    success(){}.bind({a:2})
}
那你如何區(qū)分a.success
2017年11月16日 02:28