为了账号安全,请及时绑定邮箱和手机立即绑定

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

正在回答

4 回答

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

0 回复 有任何疑惑可以回复我~

讲师的意思呢,是说 通过 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的实例,

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

4 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信