在javascirpt中,每一个对象都有一个指向它的原型对象的内部连接,这个原型对象又有本身的原型,一级一级连接上去,直到某个对象的原型为null,从而实现了继承。javascript
javascript中的原型继承几乎是面试必问点,然而真正透彻的理解它仍是须要费一番功夫的,prototype, __proto__, constructor等等看到脑子就昏掉了,有时候觉得本身掌握了,可是没过多久看到角度不一样的讲解时就又犯糊涂了TThtml
借用这篇文章中的一幅图:java
总结出了如下三点内容:面试
原型继承的时候仅仅限于对象之间的继承;函数
经过构造函数生成的对象实例,实际上继承的是构造函数的原型;spa
构造函数在其中只是充当了构造器的角色,在考虑继承关系时,能够将其忽略,而只考虑其的prototype;prototype
举个例子,使用Array构造器函数生成Array实例的时候,实例继承的是Array函数的prototype对象,Array的prototype对象上声明了concat,pop,splice等等的方法。3d
__proto__在某些环境下能够获得该对象的原型对象, 可是标准的方法是
经过Object.getPrototypeOf()的方式查询a的原型对象。htm
因此,不使用__proto__,使用Object.getPrototypeOf()的方法既标准,又能够避免咱们由于__proto__和prototype混淆而头疼。对象