先上示例:
function Animal() {
this.name = 'Animal';
};
Animal.prototype.move = function () {
console.log('Animal move');
};
function Dog(name) {
this.name = name;
Animal.call(this);
}
Dog.prototype = new Animal();
Dog.prototype.constructor = Dog;
Dog.prototype.wof = function () {
console.log('Dog Wof!!')
};
const dog1 = new Dog('micao');
console.log(dog1.name); // 输出Animal
dog1.move(); // 输出 Animal move
dog1.wof(); // Dog Wof!!
问题:
1、为什么dog1的name不是micao?
虽然dog1在创建实例时传了'micao'的入参进去,但Dog的构造函数已经将原型对象设置为Animal了 如下:
function Dog(name) {
this.name = name;
Animal.call(this);
}
所以,Dog在集成Animal(Animal.call 完之后)name已经被改写为'Animal'了;
2、为什么dog1能调用move的函数?