3

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])

可能吗?如何?

4

2 回答 2

4

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

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

实际上,jQuery 做了很多类似的事情,这就是为什么你可以做类似$('body')[0]的事情并获取body标签。jQuery 对象在收到选择器查询的返回后,会遍历每个索引并将其映射到this[i] = <selected node>. 虽然数组确实有一个特殊的length属性,但这种类型的赋值会让你大部分时间都在那里。

于 2013-07-16T06:26:25.117 回答
4

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

MyArray您可以通过将构造函数复制a[i]到来模仿它this[i],但您不会获得length.

于 2013-07-16T06:25:10.650 回答