【红宝书】理解原型
理解原型
prototype和constructor
照特定的规则去为创建的这个函数创建一个prototype属性,该属性指向原型对象。而默认情况下,所有的原型对象会自动获得一个constructor属性,指回与之关联的构造函数。
因此,构造函数有一个prototype属性指向(引用)其原型对象,原型对象的constructor属性指向(引用)该构造函数,因此,二者循环引用
在自定义函数时,原型对象默认只会获得construector属性,其他的所有方法都继承自object。自定义构造函数的原型对象的constructor指向该构造函数本身


创建新实例
每次使用new创建一个新实例,该实例的内部[[prototype]]指针就会被赋值为构造函数的原型对象,我们无法直接访问该实例的prototype属性,但浏览器会在每个实例上暴露__proto__属性,通过这个属性可以访问到对象的原型


实例与构造函数原型之间有直接的联系,但实例与构造函数之间没有

getProtoTypeOf()和setPrototypeOf()
object类型有一个getProtoTypeOf()方法,他会返回参数的内部特性[[prototype]]的值


object类型还有一个setPrototypeOf()方法,他可以向实例的私有特性[[prototype]]写入一个新值。这样就可以重写一个对象的原型继承关系。
为现有对象设置原型,返回一个新对象接收两个参数:第一个是现有对象,第二是原型对象。


Object.setPrototypeOf()会严重影响代码性能。因此可以通过Object.create()来创建一个新对象,同时为其指定原型。
