原型和原型链

一、几个概念

 

1、函数对象: js中,函数本身就是一个对象。

2、prototype (原型对象):当定义一个函数(函数对象)的时候,会包含一个预定义的属性,这个属性叫prototype。将这个属性称为 原型对象。

3、constructor (原型对象拥有 constructor预定义属性):原型对象prototype上都有预定义的constructor属性,用来引用它的函数对象。这是一种循环引用。 

4、__proto__(隐式原型):js创建对象的时候(也就是new 构造函数的时候),产生的 实例对象身上都会有一个__proto__的内置属性,这个属性指向了 它的函数对象prototype。接着,函数对象的 原型对象也有__proto__, 指向 Object.prototype , 最终指向null,  因此不断的指向中,就形成了原型链。

5、new : 使用new调用构造函数 ,这个过程相当于执行了以下代码👇

var o = {}
o.__proto__ = F.prototype;
F.call(o)

因此,在原型链的实现上,new起了很关键的作用。

 

总结:
 
Js 规定,所有对象都有自己的原型对象(prototype)。
一方面,任何一个对象,都可以充当其他对象的原型;
另一方面,由于原型对象也是对象,所以它也有自己的原型。
因此,就会形成一个“原型链”(prototype chain):对象到原型,再到原型的原型……
那么,Object.prototype对象有没有它的原型呢?回答是Object.prototype的原型是null。
null没有任何属性和方法,也没有自己的原型。因此,原型链的尽头就是null。

 

 

 

 

 

二、 instance of

 

 

 

 

 

 

 

 

 

https://www.liaoxuefeng.com/wiki/1022910821149312/1023022043494624

 

https://juejin.im/post/5d713de26fb9a06ad3474c15

 

posted @ 2021-04-12 14:36  CatherLee  阅读(59)  评论(0编辑  收藏  举报