如何使类表现得像一个数组?

时间:2013-07-16 06:21:33

标签: javascript

我知道我可以通过覆盖Number

来创建自己的valueOf课程
function MyNumber(n)
{
    this.n = n;
}

MyNumber.prototype.valueOf = function() { return this.n; };

然后我可以这样做:

var n = new MyNumber(10);

console.log(n + 1); // 11

我想知道如何通过索引访问每个值,比如

function MyArray(a)
{
    this.a = a;
}

MyArray.prototype.valueOf = function() { return this.a; };

var a = new MyArray([1, 2, 3]);

console.log(a[0])

有可能吗?怎么样?

2 个答案:

答案 0 :(得分:4)

您不能在JavaScript中重载索引操作符(或任何操作符)。

你可以通过MyArray构造函数将a[i]复制到this[i]来模仿它,但你不会得到length的魔力。

答案 1 :(得分:4)

这就像for... in循环一样简单:

function MyArray(a)
{
    this.a = a;
    for(var it in a) this[it] = a[it];
}

实际上,jQuery做了类似于此的事情,这就是为什么你可以做$('body')[0]之类的事情并获得body标签的原因。当jQuery对象收到seletor查询的返回时,它会遍历每个索引并将其映射到this[i] = <selected node>。虽然Arrays确实有一个特殊的length属性,但这种类型的赋值可以帮助你完成大部分工作。