奇怪js原型继承,奇怪!实在想不通!

function mArray(){
this.id="fdsa";
this.name="fdsafd";
}
mArray.prototype=new Array();
mArray.prototype.sayHi=function(){alert("hi");}

var m=new mArray();
m.push("1");
m.push("2");
m.push("3");
m.sayHi();
alert(m[0]); //这里会是什么结果?
alert(m.length); //这里又是什么结果?

大家先不要帖代码运行,直接看代码两个地方是什么结果?
问题补充
2楼的实例继承是没问题,但是占内存,而且想不通为什么原型继承会出现这么奇怪的问题。方法都继承下来了,但是执行的结果不合常理。

其实很正常, 内置对象在引擎初始化阶段就被创建好了,

有些属性会被引擎隐式的维护..其他对象继承不来的, 比如包装类, Date对象的方法, [color=red]Array自动维护的length属性. [/color]

所以你的mArray对象, 引擎并不帮你维护length属性, 所以始终为0, 也因为这样,

push方法虽然继承过来了, 但push时会覆盖之前push的元素.

你原型继承了Array,那你的对象就是Array,有Array的功能不奇怪啊

核心对象的继承不能这样搞

只能用实例继承

function mArray(){
var ary = new Array;
ary.sayHello = function(){
alert ("hello");

}
return ary;
}

var m = new mArray();

m.sayHello();

不过spiderMonkey引擎似乎可以.