0
根据this answer我要创造我自己的Array
我的数组的子类不调用超级构造
QArray = function() {
Array.apply(this, arguments);
};
QArray.prototype = new Array();
QArray.prototype.constructor = QArray;
预期其子类的工作,方法调用工作,但构造并不链阵列。
// test constructor chaining
q = new QArray('1', '2', '3');
assert.equals('1', q[0]); // => undefined
assert.equals(3, q.length); // => 0
q = new QArray(10);
assert.equals(10, q.length); // => 0
该测试通过,如果我用普通Array
取代QArray
。不知何故Array
似乎是一个特例。 (我在使用Javascript 1.5的Rhino 1.6中运行这个)。我该如何修复Array的自定义子类?
谢谢。是的,我可以重新实现'Array.prototype.constructor'逻辑。但为什么我必须? –
@PeterKofler由于Array构造函数不修改数组,但创建并返回新数组:'var a = []; Array.call(a)== a;'(false),反对'var a = [] ; Array.prototype.reverse.call(a)== a;'(true)。 –
谢谢。这适用于构造函数。所有的数组方法工作**但**'q = new QArray(); q [3] ='芒果'; q.length // => 0而不是4',所以当直接用'q []'设置新元素时,长度不会更新。 –