我可以重载JavaScript的索引运算符吗?

时间:2013-09-29 03:47:19

标签: javascript operator-overloading

我正在尝试重载JavaScript的索引运算符。我尝试这样做:

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

...但上面的代码失败了;我认为编译器不支持重载索引运算符。我真的需要这样一种方法;有没有办法实现它?

2 个答案:

答案 0 :(得分:1)

javascript中无法进行运算符重载。

检查此处https://stackoverflow.com/a/1711405/1903116

给出的答案

答案 1 :(得分:1)

并不是说Javascript不支持重载索引操作符(我没有调查过,所以我不知道,但我打赌有一种方法)。 [不是属性名称的有效第一个字符,因此整个名称都无效。

如果您感兴趣,Firefox 24中的JIT编译器会抛出:

SyntaxError: missing name after . operator

obj.[] = function(i) {
    ^

您无法使用.语法引用无效的属性名称。无论您希望如何使用上面描述的语法,您都会回到这个问题。 []不是有效的属性名称,因此对象始终会失败。

正如其他人所提到的,您可以使用括号语法来引用任何无效的名称,例如obj["[]"]

以下是来自Mathias Bynens' "Javascript Identifiers"的剪切和粘贴。

  

标识符必须以$,_或Unicode中的任何字符开头   类别“大写字母(Lu)”,“小写字母(Ll)”,   “Titlecase letter(Lt)”,“Modifier letter(Lm)”,“Other letter(Lo)”,   或“字母编号(Nl)”。

     

字符串的其余部分可以包含相同的字符,以及任何字符   U + 200C零宽度非连接字符,U + 200D零宽度连接器   字符和Unicode类别中的字符“非间距标记   (Mn)“,”间距组合标记(Mc)“,”十进制数字编号(Nd)“,或   “连接符标点符号(Pc)”。

     

就是这样,真的。