【问题标题】:Can I overload JavaScript's indexing operator? [duplicate]我可以重载 JavaScript 的索引运算符吗? [复制]
【发布时间】:2013-10-05 03:12:36
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么需要这个?你想达到什么目的?
  • 如果我不得不冒险,我想我认为 OP 希望能够做到 obj[10] 并让它用 i = 10 调用他的函数。 This blog post might help.

标签: javascript operator-overloading


【解决方案1】:

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

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

【讨论】:

    【解决方案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)”。

    就是这样,真的。

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多