原型与原型链

73 阅读1分钟

当说到JS继承时,只有一种结构:对象。每个实例对象都有一个私有属性__proto__,并指向原型对象prototype。原型对象本身也有自己的原型对象,向上递进到对象的原型对象为null。null没有原型,并且是原型链的最终环节。

尽管这种原型继承被认为是JS的弱点之一,但原型继承模型本身就比经典模型更强大。

2019-01-25 15-00-57 的屏幕截图.png

函数是对象,我们用构造函数的方法使Number、Boolean、String来变成对象。

2019-01-25 15-07-39 的屏幕截图.png

在上图中,我们可以看到:

n是Number的实例,n里面有__porto__指向Number()函数,同时是n的原型对象prototypeNumber()函数里有__porot__指向Object函数,同时是Number()的原型对象,NumberObject的实例。 Object的原型对象是最终的null

那么就可以得出公式:

2019-01-25 15-29-30 的屏幕截图.png

公用属性都放在同一个地方,就是为了可以共享、节省内存,而这个地方就叫原型。

每一个原型都需要被引用(链接),那这个过程就是原型链。

如果没有原型链的引用,根据浏览器的垃圾回收机制,都会被浏览器抹杀掉,从而导致崩溃。