深入理解原型链
2023-11-25 00:18:57一、原型链定义
原型链是一种查找规则
当查找一个对象上的属性或者方法时,首先从自身属性开始查找,如果没有,则去该对象的原型上查找(__proto__),如果没有,再去对象的原型的原型上去查找,直至null(Object.prototype.__proto__ === null)结束,这种链式查找,被称为原型链。
MDN上对原型链解释:
当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象( __proto__ ) ,层层向上直到一个对象的原型对象为null。根据定义,null没有原型,并作为这个原型链中的最后一个环节。
二、举例说明
比如:const obj = {},我们那obj对象来进行它的原型链举例说明:
每个对象都有一个内部属性__proto__(不能在代码中使用),这个属性指向构造当前对象的构造函数的prototype。
obj的原型链:
obj.__proto__ === Object.prototype;
Object.prototype.__proto__ === null;
以上就是obj对象的原型链,直至null结束。
当我们想要访问obj上一个属性时,如果obj对象上没有时,就会顺着它的原型链上查找,如果找到就返回,否则,一直查找到null,代表没有找到,就会返回undefined。
接下来,我们通过一个图,列出在 new 实例一个对象时,出现的每个对象间的原型关系:
