javascript prototype理解

如圖比較好的闡述了prototype和__proto__javascript

簡單的能夠這麼理解:java

狗類A( function foo()),狗類A的模板描述:A.模板 (foo.prototype)是一個對象object,  A.模板有個構造方法     foo.prototype.constructor=function foo()函數

動物B(function function()), 動物B的模板描述 . B.模板 (function.prototype),  B.模板有個構造方法     function.prototype.constructor=function function()spa

狗C= new 狗類A (f1=new foo())prototype

那麼狗c的父類模板=A.模板 即  f1.__proto__= foo.prototype.設計

狗類A的父類模板=B.模板 即    foo.__proto__=function.prototype對象

 

只有函數有prototype,對象是沒有的。blog

可是函數也是有__proto__的,由於函數也是對象。函數的__proto__指向的是Function.prototype。繼承

也就是說普通函數是Function這個構造函數的一個實例ip

__proto__能夠理解爲指向父類模板的一個引用。用來查找父類模板的

prototype能夠理解爲對象的一個屬性,用來描述自身若是做爲模板是如何定義的,該模板有方法和屬性。

function foo() 自身若是做爲模板prototype,它自身會有構建函數,模板的屬性constructor就是描述這個構建函數。

foo()這個對象其實是隱含從父類模板繼承過來的,這個父類模板就是function function()的模板屬性。即它的prototype.

設計者定義的時候名稱比較混淆不利於理解。這是javascript的敗筆。

相關文章
相關標籤/搜索