之前分享過原型和原型鏈,那時候覺得理解的還行,最近重新理了一遍原型和原型鏈,發現當時理解的好粗淺。於是又重新學了一遍。可能這次學習的還是不到位,只是分享一些新的體會。
先明確幾個概念:
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個人筆記訂閱號