欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript原型链

程序员文章站 2022-06-12 21:52:17
...

1. 说明

原型链是JavaScript中非常重要的一个基础知识之一,在我看来,原型链可以认为是一个继承链

2. 什么是原型

  • 原型的字面意思是指原来的类型或模型;
  • JavaScript的原型可以理解为一个对象,每个对象就是一个独立原型;
  • 原型(对象)就是构成原型链的一个个节点;
  • 它是JavaScript继承的基础;

3. 原型规则

  • 所有引用类型(数组,对象,函数),都可以*扩展属性;
  • 所有引用类型(数组,对象,函数),都有一个__prote__属性,他是一个普通对象,是引用类型的“隐式原型”(父对象);
  • 所有函数,都有一个prototype属性,是“显示原型”,也是普通对象;
  • 所有引用类型(数组,对象,函数),“隐式原型”__prote__的值 指向其构造函数“显示原型”prototype的值;
  • 当试图获取对象的某个属性时,如果这个对象本身没有,那么回去他的__proto__中找.(继承就实现了);

4. 原型链

function Animal() {
    this.name = "animal";
    this.eat = function() {
        console.log(this.name, "吃...");
    }
}

function Dog() {
    this.name = "dog";
    this.run = function() {
        console.log(this.name, "跑...");
    }
}

// Dog去继承Animal
Dog.prototype = new Animal();

var dog = new Dog();

dog.run(); // dog跑...
dog.eat(); // dog吃...

// dog的"隐式原型"与其构造函数Dog的“显式原型”值相同
console.log(dog.__proto__); // Animal {name: "animal", eat: ƒ}
console.log(Dog.prototype); // Animal {name: "animal", eat: ƒ}
console.log(dog.__proto__ == Dog.prototype); // true