constructor 这句有什么作用,不写也可以打印成功。

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

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

Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;

var cat1 = new Cat("大毛","黄色");
console.log(cat1.species)

···回复:

当你定义一个构造函数的时候

function Cat() {}

此时在Cat的原型对象上会有一个constructor属性,指向它自己(即Cat

Cat.prototype.constructor == Cat

当你执行以下代码时

Cat.prototype = new Animal();

你已经修改了Catprototype,此时Catprototype等于Animal的实例,Cat的原型对象已经没有了constructor这个属性,所以需要你手动给他重新赋值Cat.prototype.constructor = Cat
当然一般情况下用不到constructor这个属性,所以你不重新指定constructor也是可以的


···回复:

相当于C语言中的指针 规定指向防止混乱。


···回复:

修正构造函数,不然 cat1 的构造函数指向的是 Animal,就没有继承性了


···回复:

如果没有这句 Cat.prototype.constructor = Cat,cat.__proto__.constructor 会指向 Animal
,也就是 cat 的构造器函数 是 Animal,这显然不对,虽然可以正常使用,但是不符合继承逻辑。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up