javascript原型(容易犯糊塗點的總結)

在javascirpt中,每一個對象都有一個指向它的原型對象的內部連接,這個原型對象又有本身的原型,一級一級連接上去,直到某個對象的原型爲null,從而實現了繼承。javascript

犯渾的地方

javascript中的原型繼承幾乎是面試必問點,然而真正透徹的理解它仍是須要費一番功夫的,prototype, __proto__, constructor等等看到腦子就昏掉了,有時候覺得本身掌握了,可是沒過多久看到角度不一樣的講解時就又犯糊塗了TThtml

犯渾點1:javascript中的構造函數,實例與原型之間的關係。

借用這篇文章中的一幅圖:java

圖片描述

總結出瞭如下三點內容:面試

  1. 原型繼承的時候僅僅限於對象之間的繼承;函數

  2. 經過構造函數生成的對象實例,實際上繼承的是構造函數的原型;spa

  3. 構造函數在其中只是充當了構造器的角色,在考慮繼承關係時,能夠將其忽略,而只考慮其的prototype;prototype

舉個例子,使用Array構造器函數生成Array實例的時候,實例繼承的是Array函數的prototype對象,Array的prototype對象上聲明瞭concat,pop,splice等等的方法。3d

犯渾點2: 另一個糊塗的點就是__protp__與prototype的關係。

__proto__在某些環境下能夠獲得該對象的原型對象, 可是標準的方法是
經過Object.getPrototypeOf()的方式查詢a的原型對象。htm

因此,不使用__proto__,使用Object.getPrototypeOf()的方法既標準,又能夠避免咱們由於__proto__和prototype混淆而頭疼。對象

相關文章
相關標籤/搜索