老生常談 關(guān)于JavaScript的類的繼承
其實(shí)最一開始學(xué)JS的時(shí)候就看過繼承的實(shí)現(xiàn)。當(dāng)時(shí)只是去試著理解從書上看來的代碼段而已。今天又重新思考了一下,感覺這是一個(gè)思維探索演進(jìn)的結(jié)果。
繼承,即復(fù)用。
如果拋開繼承的固有思想,讓b復(fù)用a的成員,最簡(jiǎn)單粗暴的做法, b=a;
那么,問題來了: 對(duì)b的任何改動(dòng),就是對(duì)a的改動(dòng)(同一個(gè)object嘛)。
好吧,那就拷貝一份,淺拷貝不夠安全的話,就用深拷貝。
問題:代碼是復(fù)用了,但內(nèi)存浪費(fèi)了(不管是變量還是方法,在JS中都是對(duì)象)。
不拷貝,只讀不寫,就可以用JS的原型,b.__proto__ = a。一般我們不直接更改__proto__,太暴力了,JS中提供了一個(gè)method可以比較“溫和”地達(dá)到目的——Object.create(b)。
這個(gè)方法可行,但這只是具體對(duì)象的復(fù)用模式,如果做到“利用ConstructorB創(chuàng)建的對(duì)象能復(fù)用ConstructorA的對(duì)象的原型”呢?
答案是:將b看成是ConstructorB.prototype,將a看成ConstructorA.prototype.
問題:
解決方法:
申明ConstructorB的時(shí)候,系統(tǒng)自動(dòng)會(huì)讓ConstructorB.prototype.constructor=ConstructorB; 在上面代碼中為了復(fù)用ConstructorA.prototype, 丟掉了constructor, 補(bǔ)上即可。
以上是最基本的繼承,關(guān)于子類如何更通用地調(diào)用父類的構(gòu)造函數(shù)及成員(如this._super),如何更通用地實(shí)現(xiàn)繼承模式(如A=inheritFrom(B)),等等,不在本文范圍^O^
以上就是小編為大家?guī)淼睦仙U?關(guān)于JavaScript的類的繼承全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
js創(chuàng)建對(duì)象的區(qū)別示例介紹
本節(jié)主要介紹了js 創(chuàng)建對(duì)象的區(qū)別,不同的賦值方式,導(dǎo)致的結(jié)果也不一樣,感興趣的朋友可以了解下2014-07-07javascript事件綁定學(xué)習(xí)要點(diǎn)
這篇文章主要介紹了javascript事件綁定學(xué)習(xí)要點(diǎn),主要包含下面四個(gè)方面1.傳統(tǒng)事件綁定的問題,2.W3C事件處理函數(shù),3.IE事件處理函數(shù),4.事件對(duì)象的其他補(bǔ)充,有需要的小伙伴可以參考下2016-03-03移動(dòng)端自適應(yīng)flexible.js的使用方法(不用三大框架,僅寫一個(gè)單html頁面使用)推薦
這篇文章主要介紹了移動(dòng)端自適應(yīng)flexible.js使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04javascript窗口寬高,鼠標(biāo)位置,滾動(dòng)高度(詳細(xì)解析)
javascript窗口寬高,鼠標(biāo)位置,滾動(dòng)高度(詳細(xì)解析)。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-11-11