代码之家  ›  专栏  ›  技术社区  ›  mellowsoon

JavaScript:将对象用作数组

  •  2
  • mellowsoon  · 技术社区  · 14 年前

    这样的代码有什么陷阱吗?

    var Foo = function() {
        this.bar = function() { return 'bar'; };
    };
    
    var f = new Foo();
    f[0] = 'hi';
    f[1] = 'there';
    

    3 回复  |  直到 14 年前
        1
  •  8
  •   Community CDub    8 年前

    嗯,是的, 0 ,和 1

    使用括号符号分配属性时,括号之间的表达式将转换为字符串,该字符串将用作属性名。

    事实上,即使是 索引 实数组 只是,属性:

    var realArray = ['a'];
    realArray.hasOwnProperty('0'); // true
    

    不同的是 每个属性分配上与有效 指数 [一] length 财产。

    这就是为什么“子类化”数组对象很困难的原因之一, even with the new ECMAScript 5 extensions ECMAScript-Harmony Proxies 2 3 ,不能完全完成,以标准的方式。

    这可能是个问题,取决于你计划如何 数值属性。

    for-in 语句中,将出现其他成员,而不仅仅是数字属性。

    [1] 有效的数组索引是0到(2^32)-1范围内的任何无符号32位整数。

        2
  •  1
  •   Tikhon Jelvis    14 年前

    我想如果你试着用一个 for in 循环;循环也将得到 bar . 这是有办法的,所以你要小心。

        3
  •  1
  •   guilin 桂林    14 年前

    Array.prototype.yourfunc = function()....