在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混淆而頭疼。對象