weixin_42348545 2009-10-30 11:57
浏览 179
已采纳

奇怪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楼的实例继承是没问题,但是占内存,而且想不通为什么原型继承会出现这么奇怪的问题。方法都继承下来了,但是执行的结果不合常理。

  • 写回答

4条回答 默认 最新

  •  无冥  2009-10-30 11:57
    关注

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置