JS原型链的原理及作用

484 阅读3分钟

JavaScript 的原型链是一种继承机制,它允许对象继承另一个对象的属性和方法。通过原型链,可以实现对属性和方法的共享,节省内存,提高性能。原型链的查找过程是从对象本身开始,依次向上追溯到原型对象,直到找到匹配的属性或方法为止。

JS原型链的原理

原理介绍

官话: 基于原型对象的继承使得不同构造函数的原型对象关联到一起,并且这种关系的关系是一种链状的结构,这种关系称为原型链。
通俗理解: 在 JavaScript 中,当访问一个对象的属性或方法时,如果这个对象自身没有这个属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到匹配的属性或方法为止。这个查找的过程起始于对象的原型(prototype),然后依次向上追溯到原型对象自己的原型,最终到达 Object.prototype。如果还是没有找到,则会继续向上直到 null,这意味着查找失败。这个顺着原型查找的链式结构就叫原型链

原理图解

image.png

码上解读

<script>
        //构造函数
       function Person(name){
           this.name=name
       }
       // 构造函数实例化对象
       const ldh=new Person('刘德华')
       // 实例化对象的对象原型:
       console.log(ldh.__proto__)

       // 构造函数原型对象
       console.log(Person.prototype)
       // 构造函数原型对象的对象原型
       console.log(Person.prototype.__proto__)

       // 构造函数原型对象的对象原型指向构造函数Obiect的原型对象
       console.log(Person.prototype.__proto__===Object.prototype) //true

       // Object的原型对象的对象原型指向NULL
       console.log(Object.prototype.__proto__===null) // true

       // intanceof 判断对象是否是某个构造函数的实例
       console.log(ldh instanceof Person)  // true
       console.log(ldh instanceof Object)  // true
       console.log(ldh instanceof Array)  // false
       console.log(Array instanceof Object) // true
       </script>

要点总结

  1. 只要是对象都有__proto__属性
  2. 只要是原型对象都有constructor属性
  3. 由原型对象形成的链式结构叫原型链
  4. 原型链其实就是一种查找规则,
  5. 先看当前对象有无方法,如果当前对象没有就往当前对象的上一级查找,直到找到为止,如果找不到就返回NULL

JS原型链的作用

  1. JS原型链的主要作用就是继承。通过原型链的继承,子对象可以访问父对象的属性和方法,实现代码的复用和共享。这种继承机制在 JavaScript 中非常重要,因为它提供了一种模拟传统面向对象语言中继承特性的方法。
  2. 动态扩展:可以动态地向原型添加新的属性和方法,所有的实例对象都会立即拥有这些新增的属性和方法。
  3. 节省内存:通过共享原型上的方法,相同构造函数创建的多个实例对象不需要在每个实例中复制方法。
  4. 提高性能:原型链的查找方式比使用传统的继承语法(如 class)更为高效。