我是否可以重载JavaScript';s索引运算符?
我试图重载JavaScript的索引操作符。我试着这样做:我是否可以重载JavaScript';s索引运算符?,javascript,operator-overloading,Javascript,Operator Overloading,我试图重载JavaScript的索引操作符。我试着这样做: var obj = {}; obj.[] = function(i) { } …但上述代码失败;我认为编译器不支持重载索引运算符。我真的需要这样一种方法;有什么方法可以实现它吗?在javascript中,运算符重载是不可能的 检查这里给出的答案不是Javascript不支持重载索引操作符(我没有研究过,所以我不知道,但我打赌有一种方法)。这是因为[不是属性名称的有效第一个字符,因此整个名称将无效 如果您感兴趣,Firefox 24中的
var obj = {};
obj.[] = function(i) {
}
…但上述代码失败;我认为编译器不支持重载索引运算符。我真的需要这样一种方法;有什么方法可以实现它吗?在javascript中,运算符重载是不可能的
检查这里给出的答案不是Javascript不支持重载索引操作符(我没有研究过,所以我不知道,但我打赌有一种方法)。这是因为
[
不是属性名称的有效第一个字符,因此整个名称将无效
如果您感兴趣,Firefox 24中的JIT编译器会抛出:
SyntaxError: missing name after . operator
obj.[] = function(i) {
^
您不能使用
语法引用无效的属性名称。无论您想如何使用上述语法,您都会回到这个问题。[]
不是有效的属性名称,因此它在对象上总是会失败
正如其他人提到的,您可以使用括号语法引用任何无效名称,如obj[“[]”]
这是我的剪贴画
标识符必须以$、\或Unicode中的任何字符开头
类别“大写字母(Lu)”、“小写字母(Ll)”,
“标题字母(Lt)”、“修饰字母(Lm)”、“其他字母(Lo)”,
或“字母编号(Nl)”
字符串的其余部分可以包含相同的字符,再加上任何字符
U+200C零宽度非联接字符,U+200D零宽度联接字符
字符,以及Unicode类别中的字符“非间距标记”
(Mn)”、“间距组合标记(Mc)”、“十进制数字(Nd)”或
“连接器标点符号(Pc)”
就这样,真的
你为什么需要这个?你想实现什么?如果我必须冒险,我想我认为OP希望能够做
obj[10]
,并让它用I=10
调用他的函数。