重新認識原型和原型鏈一

wade3po發表於2019-03-12

之前分享過原型和原型鏈,那時候覺得理解的還行,最近重新理了一遍原型和原型鏈,發現當時理解的好粗淺。於是又重新學了一遍。可能這次學習的還是不到位,只是分享一些新的體會。

先明確幾個概念:

function Fn() {}var time = new Date();

JavaScript裡面有一句話說:萬物皆物件,物件帶有屬性和方法。函式也是物件,只不過是比較特殊的物件。

上面的Fn叫函式物件,Date也叫函式物件,Date是JavaScript內建的函式物件。

當我們把函式首字母大寫,這樣的函式我們不會直接呼叫,而是叫做建構函式,這是約定的俗成。

這邊要牢牢記住,Fn叫函式物件,也叫建構函式。Date、Array、String等是JavaScript內建的函式物件,也叫建構函式。Fn是我們自己定義的,Date等是JavaScript內建的。

函式物件都有原型,也就是prototype屬性,函式的原型其實就是指prototype,當然,它也是一個物件,畢竟萬物皆物件,所以prototype也可以叫原型物件。宣告函式的時候會自動生成原型prototype屬性。JavaScript內建的函式也都有原型prototype,也有一些除外,暫時就知道Math沒有。

還有一點要特別記住,prototype只有函式物件才有,prototype也叫作顯式原型,也就是說只有函式才有顯式原型。

function Fn() {}

console.log(Fn.prototype)

console.log(Object.prototype)

console.log(Number.prototype)

console.log(Date.prototype)

console.log(RegExp.prototype)

console.log(Math.prototype)

var a = 1;

var b = 'abc';

var c = true;

console.log(a.prototype)

console.log(b.prototype)

console.log(c.prototype)

重新認識原型和原型鏈一

以上這些概念要好好理一下,然後記住。

歡迎關注Coding個人筆記訂閱號

相關文章