According to this answer I want to create my own subclass of Array
QArray = function() {
Array.apply(this, arguments);
};
QArray.prototype = new Array();
QArray.prototype.constructor = QArray;
which works as expected, method invocation works, but the constructor does not chain to Array.
// 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
This tests pass if I replace QArray with plain Array. Somehow Array seems to be a special case. (I run this in Rhino 1.6 which is Javascript 1.5.) How can I fix my custom subclass of Array?
Since your method already inherits the array methods, you can use array methods which modify the keys, such as
Array.prototype.push:I’ve once written a custom array implementation, which behaves like a true array (including
lengthsetter/getter). If you need inspiration, have a look at this answer.