概述
关于 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)。假如另一个原型又是另一个类型的实例……这就构成了实例与原型的链条。
网友评论