摘要:每個原型都有一個屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)由于實例對象可以繼承原型對象的屬性,所以實例對象也擁有屬性,同樣指向原型對象對應(yīng)的構(gòu)造函數(shù)。
構(gòu)造函數(shù):function Foo ( ) { }; 實例對象:let f1=new Foo;
談到繼承時,JavaScript 只有一種結(jié)構(gòu):對象
每個函數(shù)都有 prototype 屬性,除了 Function.prototype.bind(),該屬性指向原型。
prototype每一個JavaScript對象(null除外)在創(chuàng)建的時候就會與之關(guān)聯(lián)另一個對象,這個對象就是我們所說的原型,每一個對象都會從原型"繼承"屬性。
函數(shù)的 prototype 屬性指向了一個對象,這個對象正是調(diào)用該構(gòu)造函數(shù)而創(chuàng)建的實例的原型,也就是這個例子中的 f1 的原型。prototype帶有__proto__和constructor
proto每一個JavaScript對象(除了 null )都具有的一個屬性,叫__proto__,這個屬性會指向了創(chuàng)建該對象的構(gòu)造函數(shù)的原型。
console.log(f1._proto_ === Foo.prototype) // trueconstructor
每個原型都有一個 constructor 屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)
由于實例對象可以繼承原型對象的屬性,所以實例對象也擁有constructor屬性,同樣指向原型對象對應(yīng)的構(gòu)造函數(shù)。
console.log(Foo.prototype.constructor === Foo);//true console.log(f1.constructor === Foo);//true console.log(f1.hasOwnProperty("constructor"));//false原型鏈
JS在創(chuàng)建對象(不論是普通對象還是函數(shù)對象)的時候,都有一個叫做__proto__的內(nèi)置屬性,用于指向創(chuàng)建它的函數(shù)對象的原型對象prototype。以上面的例子為例:
console.log(fo.__proto__ === Foo.prototype) //true
同樣Foo.prototype也有proto屬性
console.log(Foo.prototype.__proto__ === Object.prototype) //true
Object.prototype對象也有proto屬性,但它比較特殊,為null
console.log(Object.prototype.__proto__ === null)
我們把這個有proto串起來的直到Object.prototype.proto為null的鏈叫做原型鏈。原型鏈的形成是真正是靠proto 而非prototype
總結(jié)
每個構(gòu)造函數(shù)都有一個原型對象
Foo.prototype
原型對象都包含一個指向構(gòu)造函數(shù)的指針
Foo.prototype.constructor === Foo
實例都包含一個指向原型對象的內(nèi)部指針
fo.__proto__ === Foo.prototype
更多文章請前往語雀
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99520.html
摘要:要搞清這三種關(guān)系指向之間的關(guān)系拗口,其實也就是要搞懂,構(gòu)造函數(shù)由構(gòu)造函數(shù)操作創(chuàng)造出的實例對象和構(gòu)造函數(shù)的原型對象之間的關(guān)系。 寫在前面 這篇博客來源于,有天mentor突然傳給我了這張祖?zhèn)鞯膱D片,并且發(fā)誓一定要給我講清楚,然鵝在他的一番激情講解之后,他自己也被繞懵了...于是后來我決定整理一下似乎還有點清晰的思路,記錄一下我對這張圖的理解。作為一個小白,對于js中這些比較復雜的概念的理...
摘要:這正是我們想要的太棒了毫不意外的,這種繼承的方式被稱為構(gòu)造函數(shù)繼承,在中是一種關(guān)鍵的實現(xiàn)的繼承方法,相信你已經(jīng)很好的掌握了。 你應(yīng)該知道,JavaScript是一門基于原型鏈的語言,而我們今天的主題 -- 繼承就和原型鏈這一概念息息相關(guān)。甚至可以說,所謂的原型鏈就是一條繼承鏈。有些困惑了嗎?接著看下去吧。 一、構(gòu)造函數(shù),原型屬性與實例對象 要搞清楚如何在JavaScript中實現(xiàn)繼承,...
摘要:共享原型鏈現(xiàn)在我們還有另一個對象如圖那么和其實是同一東西,也就是。改進通過第一節(jié)可以知道,我們可以通過原型鏈來解決重復創(chuàng)建的問題我們先創(chuàng)建一個士兵原型,然后讓士兵的指向士兵原型。所以這個是原型鏈繼承的缺點,原因是和指向同一個地址即父類的。 在理解繼承之前,需要知道 js 的三個東西: 什么是 JS 原型鏈 this 的值到底是什么 JS 的new 到底是干什么的 想閱讀更多優(yōu)質(zhì)文章...
摘要:的原型鏈,需要深刻的研究才能搞懂。對象都是通過函數(shù)即構(gòu)造函數(shù)創(chuàng)建的。即這里的成為隱式原型。而構(gòu)造函數(shù)的屬性指向自身。這個對象的構(gòu)造函數(shù)的是一個對象。走到原型鏈的終結(jié)。 - JS是一個非常有魅力的語言也是一個比較煩人的語言,主要就是因為他的特殊性靈活性。 JS的原型鏈,需要深刻的研究才能搞懂。不要糾結(jié)細節(jié)吧。實在不行就按這個死背住,慢慢就理解了。總之吧就是一句話萬物皆對象。 結(jié)合這個圖示...
閱讀 3407·2023-04-26 02:41
閱讀 2455·2023-04-26 00:14
閱讀 2863·2021-08-11 10:22
閱讀 1284·2019-12-27 11:38
閱讀 3576·2019-08-29 18:34
閱讀 2384·2019-08-29 12:13
閱讀 2955·2019-08-26 18:26
閱讀 1855·2019-08-26 16:49