我想重載JavaScript的索引操作符。我試過這樣做:我可以重載JavaScript的索引操作符嗎?
var obj = {};
obj.[] = function(i) {
}
......但上面的代碼失敗;我認爲編譯器不支持重載索引操作符。我真的需要這樣一種方法;有什麼辦法可以實現它嗎?
我想重載JavaScript的索引操作符。我試過這樣做:我可以重載JavaScript的索引操作符嗎?
var obj = {};
obj.[] = function(i) {
}
......但上面的代碼失敗;我認爲編譯器不支持重載索引操作符。我真的需要這樣一種方法;有什麼辦法可以實現它嗎?
運算符重載在JavaScript中是不可能的。
答案它與其說是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)「。
就是這樣,真的。
爲什麼你需要這個?你想達到什麼目的? – 2013-09-29 03:51:44
如果我不得不冒險,我想我希望OP能夠做'obj [10]',並讓它用'i = 10'來調用他的函數。 [這篇博文可能有幫助。](http://www.bennadel.com/blog/2292-Extending-JavaScript-Arrays-While-Keeping-Native-Bracket-Notation-Functionality.htm) – Mike