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引擎似乎可以.