javascript 原型问题

 function Animal(){
    this.species = "动物";
  }

  function Cat(name,color){
    this.name = name;
    this.color = color;
  }

 Cat.prototype = new Animal();
 Cat.prototype.constructor = Cat;
 //Cat的原型指向了 Animal生成的对象,此时Cat 和Animal
不是引用了同一个原型吗 ,将Cat的构造器覆盖了 不也会
同时覆盖 Animal的构造器吗? 所以下面这句为什么不是false而
是true

 alert(Animal.prototype.constructor == Animal); // true

阅读 1.7k
2 个回答

Cat.prototype = new Animal(); 这一步 将Cat.prototype修改为Animal 的实例

此时的 Cat.prototype.constructor 的确是等于 Animal

但是 Cat.prototype 里面并没有 constructor 属性,Cat.prototype.constructor === Animal()只是因为在自身找不到 constructor 属性,所以找到了 Animal.prototype ;

Cat.prototype.constructor = Cat; 这一步 为Cat.prototype 新增了 constructor 熟悉,但并不影响 Animal.prototype.constructor

并没有引用了同一个原型哦,先解释一个小的知识点:
我们可以通过构造函数.prototype的方式访问到原型,当然也可以通过原型.constructor的方式访问到构造函数,所以
为什么Animal.prototype.constructor == Animal返回的是true相信你已经能够明白了。

原型关系

下面解释下你的demo为什么不是同一个原型:

demo 分析

但是通过原型继承的概念可以知道,Cat 的原型变为 Animal实例对象后,他也可以继承 Animal原型里面的方法

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