0

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

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

…但是上面的代码失败了;我认为编译器不支持重载索引运算符。我真的需要这样的方法;有什么方法可以实现吗?

4

2 回答 2

1

javascript 中无法实现运算符重载。

检查这里给出的答案https://stackoverflow.com/a/1711405/1903116

于 2013-09-29T03:53:29.710 回答
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)”。

就是这样,真的。

于 2013-09-29T03:54:07.140 回答