悠悠隐于市 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 C#读写EXCEL文件,不同编译
  • ¥15 如何提取csv文件中需要的列,将其整合为一篇完整文档,并进行jieba分词(语言-python)
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置