我正在尝试重载JavaScript的索引运算符。我尝试这样做:
var obj = {};
obj.[] = function(i) {
}
...但上面的代码失败了;我认为编译器不支持重载索引运算符。我真的需要这样一种方法;有没有办法实现它?
答案 0 :(得分:1)
javascript中无法进行运算符重载。
给出的答案答案 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)”。
就是这样,真的。