原型链:利用原型让一个引用类型继承另外一个引用类型的属性和方法
原型链是继承的主要方法
简单讲一下构造函数,原型和实例的关系
> 每一个函数都有一个原型对象,原型对象都包含一个指向自己的构造器指针,而实例都包含一个指向原型对象内部的指针。如果让原型对象等于另一个类型的实例,结果会怎么样呢?显然,此时的原型对象将包含一个指向另一个原型对象的指针,相应的,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。
由于proto是任何对象都具有的属性,而js中万物皆对象,会形成一条一条__proto__连接起来的链,并且最终都是指向null.
constructor是构造函数prototype(原型属性中的属性),他指的是构造函数本身。
__proto__指的是对象的原型对象,但是__proto__是一个非标准属性。
prototype是构造函数的原型属性;也就是我们常说的原型
我们在设置prototype时只能给构造函数设置,对象上是不可以设置的,如果我们想用对象
来获得构造函数中的prototype中的值只能通过非标准属性(__proto__)来获得,但是不建议使用,只建议在测试中使用__proto__属性- 这是一个非常复杂的原型链,其中在原型链中最饱受争议的就是Object创建了Function,还是Function创建了Object,我们如果沿着原型链展开Function和Object会发现他们是无群无尽的。