在javascirpt中,每个对象都有一个指向它的原型对象的内部链接,这个原型对象又有自己的原型,一级一级链接上去,直到某个对象的原型为null,从而实现了继承。

犯浑的地方

javascript中的原型继承几乎是面试必问点,然而真正透彻的理解它还是需要费一番功夫的,prototype, __proto__, constructor等等看到脑子就昏掉了,有时候以为自己掌握了,但是没过多久看到角度不同的讲解时就又犯糊涂了TT

犯浑点1:javascript中的构造函数,实例与原型之间的关系。

借用这篇文章中的一幅图:

图片描述

总结出了以下三点内容:

  1. 原型继承的时候仅仅限于对象之间的继承;

  2. 通过构造函数生成的对象实例,实际上继承的是构造函数的原型;

  3. 构造函数在其中只是充当了构造器的角色,在考虑继承关系时,可以将其忽略,而只考虑其的prototype;

举个例子,使用Array构造器函数生成Array实例的时候,实例继承的是Array函数的prototype对象,Array的prototype对象上声明了concat,pop,splice等等的方法。

犯浑点2: 另外一个糊涂的点就是__protp__与prototype的关系。

__proto__在某些环境下可以得到该对象的原型对象, 但是标准的方法是
通过Object.getPrototypeOf()的方式查询a的原型对象。

所以,不使用__proto__,使用Object.getPrototypeOf()的方法既标准,又可以避免我们因为__proto__和prototype混淆而头疼。


rosie15
82 声望2 粉丝