js原型链

先上示例:

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的函数?

dog1实例在查找方法和属性时,会先在自身查找,然后沿着原型链往上找,dog1的原型就是Animal,故是集成了Animal的move函数的
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容