原型原型链

51 阅读1分钟

image-20250215110001850

我们通过构造函数,创建了一个arr数组,在使用时会发现上面有很多定义好的方法,我们在创建时并没有定义,这些方法是哪里来的?

image-20250216092404778

通过打印arr,可以看出来这些方法来自于[[prototype]]这个对象。这个对象就是原型或原型对象。

原型

显式原型(prototype)

每个函数在创建时,都会有一个prototype属性,这是一个对象,也就是显式原型。在定义函数时,可以通过this访问和添加属性。prototype作为构造函数创建的对象实例的原型。这个原型内通过constructor指回该函数。

隐式原型([[Prototype]])

当函数作为构造函数,通过new创建示例对象时。每个对象上都有[[Prototype]]指向原型对象,这就是隐式原型

[[]]包裹的是内部属性,不能直接访问。对于[[Prototype]],不同环境提供的访问方式不同,可以通过示例对象的__proto__访问原型

原型链

通过构造函数创建示例对象时,对象上的__proto__指向原型,原型本质也是一个对象,会通过__proto__指向它的原型。直到指向最顶层,Object.__proto__为空。这样就形成了原型链。

当访问对象上的属性时,如果不存在,就会沿着原型链,到它的原型上寻找,直到最后到空对象,报错。