3 回答

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

TA貢獻1946條經驗 獲得超4個贊
個人猜測:
{
funcName(args...) {
// ...
}
}
這種是語法層面的 聲明方法 操作,編譯器能接受的只是 funcName(...) {...} 這么個結構, } 之后就不允許出現 . 這種行為了。
而
{
funcName: funciton(args...) {
//...
}.bind(...) // 注意到 bind 返回的仍然是一個 function
}
這種是為 funcName 這個鍵賦值一個 Function 類型的匿名函數的值。
所以應該是語法層面的問題。
如有錯誤還請海涵 : )

TA貢獻1816條經驗 獲得超4個贊
var obj = {
func01: function() {},
func02() {}
};
這應該是兩種寫法上的區別
func01是在執行那一行的時候,function才定義的,當執行bind的時候function就已經定義好了,所以使用bind不會出錯,
而func02是在定義obj的過程中定義的,當執行到func02的時候,這時候函數的聲明有可能還沒執行完,所以這時候調用bind方法會報錯
添加回答
舉報