我知道我可以通过覆盖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])
有可能吗?怎么样?
答案 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
属性,但这种类型的赋值可以帮助你完成大部分工作。