我正在尝试重载 JavaScript 的索引运算符。我试着这样做:
var obj = {};
obj.[] = function(i) {
}
…但是上面的代码失败了;我认为编译器不支持重载索引运算符。我真的需要这样的方法;有什么方法可以实现吗?
我正在尝试重载 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)”。
就是这样,真的。