【问题标题】:Can I overload JavaScript's indexing operator? [duplicate]我可以重载 JavaScript 的索引运算符吗? [复制]
【发布时间】:2013-10-05 03:12:36
【问题描述】:
我正在尝试重载 JavaScript 的索引运算符。我试过这样做:
var obj = {};
obj.[] = function(i) {
}
…但是上面的代码失败了;我认为编译器不支持重载索引运算符。我真的需要这样的方法;有什么方法可以实现吗?
【问题讨论】:
标签:
javascript
operator-overloading
【解决方案2】:
并不是说 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)”。
就是这样,真的。