js中关于继承的问题?

    function AAA() {
    
    this.name = "AAA name";
    
    }
    
    function BBB() {
    
    }
    
    BBB.prototype = new AAA();
    
    var bbb = new BBB();
    var ccc = new BBB();
    
    console.log(bbb.name);  \\AAA name
    console.log(ccc.name);  \\AAA name
    
    bbb.name = "111";
    
    console.log(bbb.name);  \\111
    console.log(ccc.name);  \\AAA name

这不是原型链继承吗?为什么修改了bbb.name后,ccc.name不一起改变呢?

阅读 2.9k
5 个回答

在重新定义一个和原型链上名字一样的变量时,不是覆盖原型链上的变量,而是在自己的class里面新追加一个.

你改成这样
bbb.__proto__.name = "111";
或者
BBB.prototype.name = "111";
最后的两个就都打印出来111了.

对属性的修改只会影响实例本身,即bbb自身

因为bbb.name和ccc.name的指向是不一样的,你用了new。

bbb ccc分别对BBB进行了new操作,此时就相当于分别开辟了两个地址空间bbb ccc,修改属性就就只能更新属于该地址空间的值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题