来源:2-3 高级的前端架构设计

weibo_彩虹AND天堂

2014-10-09 14:59

这个地方有问题吧,people.prototype.getName 的修改依然会影响到MAN实例

写回答 关注

4回答

  • luobotang
    2014-10-22 20:13:18

    我听到的貌似也是有问题的版本,不过既然大家其实都明确讲师原本是啥意思,就没关系了。

  • 278500368
    2014-10-18 19:48:09

    讲师的意思呢,是说 通过 man.prototype = new people; 这种方式进行继承之后,在man.prototype上对getName方法进行修改,不会影响people.prototype上的同名方法

    例如:

     function People (){
      this.name = 'frog';
      this.age = 29;
     }
     
     People.prototype.getName = function(){
      return this.name;
     }
     
     function Man(){
        this.name = 'rat';
        this.age = 3;
     }
     
     Man.prototype = People.prototype;

     //某一天,新来的小伙伴修改了这个方法
     Man.prototype.getName = function(){
      return this.age;
     }
     

    //验下一下父类是否被子类改写
     var p = new People;
     var n = p.getName();
     console.log(n); // 输出29而不是 frog
     //说明直接用原开链,父类会被子类改写


    而Man.prototype = new People;

    则父类原型链上的同名方法不会被改写

    因为这时Man.prototype上保存的只是People的实例,

    而实例的修改,显然是不会对它的类构成影响的。

  • 278500368
    2014-10-18 19:17:27

    讲师的意思呢,是说 通过 man.prototype = new people; 这种方式进行继承之后,在man.prototype上对getName方法进行修改,不会影响man.prototype.getName。

  • androidfeng
    2014-10-10 15:19:49

    确实会影响MAN的实例 这是个错误

电商网站前端架构

整个项目组织、开发、发布等流程,教你如何创建一个电子商务网站

101298 学习 · 206 问题

查看课程

相似问题