在javascirpt中,每个对象都有一个指向它的原型对象的内部链接,这个原型对象又有自己的原型,一级一级链接上去,直到某个对象的原型为null,从而实现了继承。
犯浑的地方
javascript中的原型继承几乎是面试必问点,然而真正透彻的理解它还是需要费一番功夫的,prototype, __proto__, constructor等等看到脑子就昏掉了,有时候以为自己掌握了,但是没过多久看到角度不同的讲解时就又犯糊涂了TT
犯浑点1:javascript中的构造函数,实例与原型之间的关系。
借用这篇文章中的一幅图:
总结出了以下三点内容:
原型继承的时候仅仅限于对象之间的继承;
通过构造函数生成的对象实例,实际上继承的是构造函数的原型;
构造函数在其中只是充当了构造器的角色,在考虑继承关系时,可以将其忽略,而只考虑其的prototype;
举个例子,使用Array构造器函数生成Array实例的时候,实例继承的是Array函数的prototype对象,Array的prototype对象上声明了concat,pop,splice等等的方法。
犯浑点2: 另外一个糊涂的点就是__protp__与prototype的关系。
__proto__在某些环境下可以得到该对象的原型对象, 但是标准的方法是
通过Object.getPrototypeOf()的方式查询a的原型对象。
所以,不使用__proto__,使用Object.getPrototypeOf()的方法既标准,又可以避免我们因为__proto__和prototype混淆而头疼。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。