JS中原型与原型链

2019-01-15  本文已影响0人  一许青衫一

概述

关于 JS 中的原型与原型链,看了好几次,但是回头发现还是朦朦胧胧,说明自己并没有彻底弄清楚,所以写下文章,进行总结。

prototype 属性与 proto 属性

所有引用类型(函数,数组,对象)都拥有 _proto_ 属性(隐性原型)。
所有函数都拥有 prototype 属性(仅限函数)。
实例的隐式原型指向它构造函数的显式原型

function Person();
var p = new Person();

例如上面代码所示,创建了函数Person,这里的函数Person就是构造函数。在创建这个构造函数Person的时候,会给这个构造函数自动创建一个实例对象,就叫做原型对象。Person.prototype就是Person的一个实例对象,并且将这个实例对象赋值给了构造函数的属性prototype。
在这个原型对象中,保存着构造函数Person的所有实例共享的属性和方法。
只有通过new FuntionName() 而得到的对象才是实例对象,如上面的p。

构造函数、原型对象和实例

原型链

原型链
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数想指针(constructor),而实例对象都包含一个指向原型对象的内部指针(proto)。如果让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针(proto),另一个原型也包含着一个指向另一个构造函数的指针(constructor)。假如另一个原型又是另一个类型的实例……这就构成了实例与原型的链条。
上一篇下一篇

猜你喜欢

热点阅读