2013-09-29 31 views
0

我想重載JavaScript的索引操作符。我試過這樣做:我可以重載JavaScript的索引操作符嗎?

var obj = {}; 
obj.[] = function(i) { 
} 

......但上面的代碼失敗;我認爲編譯器不支持重載索引操作符。我真的需要這樣一種方法;有什麼辦法可以實現它嗎?

+2

爲什麼你需要這個?你想達到什麼目的? – 2013-09-29 03:51:44

+1

如果我不得不冒險,我想我希望OP能夠做'obj [10]',並讓它用'i = 10'來調用他的函數。 [這篇博文可能有幫助。](http://www.bennadel.com/blog/2292-Extending-JavaScript-Arrays-While-Keeping-Native-Bracket-Notation-Functionality.htm) – Mike

回答

1

答案它與其說是JavaScript不支持重載索引操作符(我還沒看着它,所以我不知道,但我敢打賭,有一種方法) 。這就是[不是屬性名稱的有效第一個字符,因此整個名稱將變爲無效。

在你感興趣的情況下,在Firefox 24中的JIT編譯器扔:

SyntaxError: missing name after . operator 

obj.[] = function(i) { 
    ^

不能引用無效的屬性名稱與.語法。無論您想如何使用上面描述的語法,您總是會回到這個問題上。 []不是有效的屬性名稱,因此它總是會在對象上失敗。

正如其他人所提到的,您可以使用括號語法來引用任何無效的名稱,如obj["[]"]

下面是從Mathias Bynens' "Javascript Identifiers"中剪切並粘貼。

標識符必須以$開始,_,或以Unicode 類別「大寫字母(LU)」,「小寫字母(LL)」, 「的首字母大寫字母(LT)」,「修改任何字符字母(Lm)「,」其他字母(Lo)「, 或」字母編號(Nl)「。

的字符串可以包含相同的字符的其餘部分,並加上任何 U + 200C零寬度非木匠字符,U + 200D零寬度木匠 字符,並且字符以Unicode類別「非間距標記 ( Mn)「,」間距組合標記(Mc)「,」十進制數字號(Nd)「或」連接器標點符號(Pc)「。

就是這樣,真的。

相關問題