Jon is right. Here's a way to fix it. Instead of setting StrangeArray.prototype to Array.prototype, this will let you set StrangeArray.prototype to a new instance of Array, so it inherits Array.prototype's properties (without calling Array's constructor).
Object.prototype.inherit = function(baseConstructor) {
var tmp = Function();
tmp.prototype = baseConstructor.prototype;
this.prototype = new tmp();
this.prototype.constructor = this;
};
Edit:
this.prototype = new baseConstructor();
works in this example, but is not good in more complex programs. If the base constructor does some initialization, such as creating DOM elements, incrementing a count, or connecting to a server, then all that initialization would take place when the script loads, instead of when the child object is instantiated.
Another way to deal with this is to differentiate in the constructor whether it is being called for inheritance (to assign to a prototype) or just to instantiate, and then not do the initialization stuff if it is being called for inheritance. But I prefer to just not call the constructor when inheriting, and so use an empty function for the constructor when inheriting.
I'm not very good at explaining this stuff. I recommend Crockford's site and also these two articles on Javascript inheritance.