摘要:即對(duì)象具有屬性,可稱為隱式原型,一個(gè)對(duì)象的隱式原型指向構(gòu)造該對(duì)象的構(gòu)造函數(shù)的原型,這也保證了實(shí)例能夠訪問(wèn)在構(gòu)造函數(shù)原型中定義的屬性和方法。重點(diǎn)隱式原型指向構(gòu)造該對(duì)象的構(gòu)造函數(shù)的原型。
1.在JS里,萬(wàn)物皆對(duì)象。方法(Function)是對(duì)象,方法的原型(Function.prototype)是對(duì)象。因此,它們都會(huì)具有對(duì)象共有的特點(diǎn)。即:對(duì)象具有屬性proto,可稱為隱式原型,一個(gè)對(duì)象的隱式原型指向構(gòu)造該對(duì)象的構(gòu)造函數(shù)的原型,這也保證了實(shí)例能夠訪問(wèn)在構(gòu)造函數(shù)原型中定義的屬性和方法。
2.方法(Function)方法這個(gè)特殊的對(duì)象,除了和其他對(duì)象一樣有上述proto屬性之外,還有自己特有的屬性——原型屬性(prototype),這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象,這個(gè)對(duì)象的用途就是包含所有實(shí)例共享的屬性和方法(我們把這個(gè)對(duì)象叫做原型對(duì)象)。原型對(duì)象也有一個(gè)屬性,叫做constructor,這個(gè)屬性包含了一個(gè)指針,指回原構(gòu)造函數(shù)。
1.1
首先聲明一個(gè)對(duì)象和一個(gè)函數(shù),console.log一下對(duì)象和函數(shù)的proto
var A = function () {};
var B ={};
console.log(A.__proto__)
console.log(B.__proto__)
控制臺(tái)輸出結(jié)果如下圖所示:
剛才不是說(shuō)函數(shù)是對(duì)象嗎?它們的proto為啥不一樣?往下看,別著急。
var A = function () {};
var B ={};
console.log(A.__proto__.__proto__)
console.log(B.__proto__)
console.log結(jié)果如下:
是不是一樣了,,確實(shí)有點(diǎn)懵逼啊。。重點(diǎn) 隱式原型指向構(gòu)造該對(duì)象的構(gòu)造函數(shù)的原型。因?yàn)閒unction是特殊的對(duì)象,A.proto就指向了構(gòu)造該函數(shù)的一個(gè)函數(shù)(隨意起個(gè)名字 C),C的proto就指向了和B對(duì)象一樣的proto。。我自己都懵逼了。
1.2一個(gè)對(duì)象和一個(gè)函數(shù),console.log一下對(duì)象和函數(shù)的prototype
var A = function () {};
var B ={};
console.log(A.prototype)
console.log(B.prototype)
console.log結(jié)果如下:
對(duì)象并不具有prototype屬性,只有函數(shù)才有prototype屬性。這就證明聲明2的說(shuō)法是正確的。
總結(jié):
js里所有的對(duì)象都有proto屬性(對(duì)象,函數(shù)),指向構(gòu)造該對(duì)象的構(gòu)造函數(shù)的原型。
只有函數(shù)function才具有prototype屬性。這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象,這個(gè)對(duì)象的用途就是包含所有實(shí)例共享的屬性和方法(我們把這個(gè)對(duì)象叫做原型對(duì)象)。原型對(duì)象也有一個(gè)屬性,叫做constructor,這個(gè)屬性包含了一個(gè)指針,指回原構(gòu)造函數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108208.html
摘要:搞清了構(gòu)造函數(shù)和原型的區(qū)別后,就可以繼續(xù)了。指向構(gòu)造函數(shù)的原型對(duì)象,存在于實(shí)例與構(gòu)造函數(shù)的原型對(duì)象之間。要注意的是當(dāng)我們使用下面這種將整個(gè)重寫(xiě)的情況時(shí),會(huì)切斷構(gòu)造函數(shù)和原型之間的聯(lián)系,也就是說(shuō)不再指向了,而是指向。 前言 先說(shuō)一說(shuō)為什么要搞清楚JavaScript的原型,因?yàn)檫@就是JS的根。JavaScript雖然不是一門傳統(tǒng)的面向?qū)ο笳Z(yǔ)言,但它有自己的類和繼承機(jī)制,最重要的就是它采用...
摘要:前言見(jiàn)解有限,如有描述不當(dāng)之處,請(qǐng)幫忙及時(shí)指出,如有錯(cuò)誤,會(huì)及時(shí)修正。倘若用的是中文搜索。所以最終的實(shí)例對(duì)象仍然能進(jìn)行正常的原型鏈回溯,回溯到原本的所有原型方法這樣通過(guò)一個(gè)巧妙的欺騙技巧,就實(shí)現(xiàn)了完美的繼承。 前言 見(jiàn)解有限,如有描述不當(dāng)之處,請(qǐng)幫忙及時(shí)指出,如有錯(cuò)誤,會(huì)及時(shí)修正。 20180201更新: 修改用詞描述,如組合寄生式改成寄生組合式,修改多處筆誤(感謝@Yao Ding的...
摘要:要搞清這三種關(guān)系指向之間的關(guān)系拗口,其實(shí)也就是要搞懂,構(gòu)造函數(shù)由構(gòu)造函數(shù)操作創(chuàng)造出的實(shí)例對(duì)象和構(gòu)造函數(shù)的原型對(duì)象之間的關(guān)系。 寫(xiě)在前面 這篇博客來(lái)源于,有天mentor突然傳給我了這張祖?zhèn)鞯膱D片,并且發(fā)誓一定要給我講清楚,然鵝在他的一番激情講解之后,他自己也被繞懵了...于是后來(lái)我決定整理一下似乎還有點(diǎn)清晰的思路,記錄一下我對(duì)這張圖的理解。作為一個(gè)小白,對(duì)于js中這些比較復(fù)雜的概念的理...
摘要:共享原型鏈現(xiàn)在我們還有另一個(gè)對(duì)象如圖那么和其實(shí)是同一東西,也就是。改進(jìn)通過(guò)第一節(jié)可以知道,我們可以通過(guò)原型鏈來(lái)解決重復(fù)創(chuàng)建的問(wèn)題我們先創(chuàng)建一個(gè)士兵原型,然后讓士兵的指向士兵原型。所以這個(gè)是原型鏈繼承的缺點(diǎn),原因是和指向同一個(gè)地址即父類的。 在理解繼承之前,需要知道 js 的三個(gè)東西: 什么是 JS 原型鏈 this 的值到底是什么 JS 的new 到底是干什么的 想閱讀更多優(yōu)質(zhì)文章...
摘要:原文鏈接關(guān)于的原型和原型鏈,看我就夠了一參考鏈接闖關(guān)記之原型及原型鏈之原型與原型鏈一篇文章帶你理解原型和原型鏈徹底理解原型鏈一的默認(rèn)指向圖解和的三角關(guān)系原型和原型鏈三張圖搞懂的原型對(duì)象與原型鏈 溫故 創(chuàng)建對(duì)象的三種方式 通過(guò)對(duì)象直接量 通過(guò)new創(chuàng)建對(duì)象 通過(guò)Object.create() js中對(duì)象分為兩種 函數(shù)對(duì)象 普通對(duì)象 仔細(xì)觀察如下代碼 function Foo(na...
閱讀 2417·2021-10-08 10:04
閱讀 1191·2021-09-03 10:40
閱讀 1215·2019-08-30 15:53
閱讀 3359·2019-08-30 13:13
閱讀 2986·2019-08-30 12:55
閱讀 2338·2019-08-29 13:21
閱讀 1480·2019-08-26 12:12
閱讀 2815·2019-08-26 10:37