悠悠隐于市 2011-12-27 10:23
浏览 303
已采纳

JS 中prototype 的问题

[code="java"]
//Object对象的inObj设置为1;
Object.prototype.inObj = 1;

//定义A类;
function A(){
//给属性设置值为2;
this.inA = 2;
}

//给A类的inAproto属性设置为3;
A.prototype.inAProto = 3;

//这下面两句是什么意思?
B.prototype = new A();
B.prototype.constructor = B;

//定义B类;
function B(){
//给B类属性设置值为4;
this.inB = 4;
}

B.prototype.inBroto = 5;

x = new B;
document.write(x.inObj+","+x.inA+","+x.inAProto+","+x.inB+","+x.inBroto);
[/code]

//这下面两句是什么意思?
[b]B.prototype = new A();
B.prototype.constructor = B;[/b]

  • 写回答

3条回答 默认 最新

  • ylf0716 2011-12-28 13:10
    关注

    B.prototype = new A();

    B.prototype.constructor = B;

    这是实现继承的一个方式,可以叫原型拷贝
    你可以暂时把圆形理解为java中的静态变量
    A.prototype.inAProto = 3; 这样每个A的实例共用inAProto 这个属性
    而this.inA = 2;每个实例中inA 都是不同的引用

    new A()的结果是一个对象,其中包含了 inA = 2; inAProto = 3;这两个属性
    再将这个对象赋给B的原型 B.prototype,那B这个类中就有了 inA = 2; inAProto = 3 这两个属性

    因为prototype中默认都是有constructor这个属性的,这个属性指向创建B对象的函数 也就是 function B(){

    //给B类属性设置值为4;

    this.inB = 4;

    } 但是 B.prototype = new A(); 这句话会把B.prototype中的constructor属性覆盖掉,变成了A.prototype.constructor,所以才有了下面这句话 B.prototype.constructor = B;

    重新指向一下 不知道说的够不够清楚

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

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝