国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

全面理解JavaScript中的繼承(必看)

2019-11-20 09:41:38
字體:
供稿:網(wǎng)友

JavaScript中我們可以借助原型實(shí)現(xiàn)繼承。

例如

function baz(){this.oo="";}function foo(){}foo.prototype=new baz();var myFoo=new foo();myFoo.oo;

這樣我們就可以訪問到baz里的屬性oo啦。在實(shí)際使用中這個(gè)樣不行滴,由于原型的共享特點(diǎn)(數(shù)據(jù)保存在了堆上),

所有實(shí)例都使用一個(gè)原型,一但baz的屬性有引用類型就悲劇了,一個(gè)實(shí)例修改了其他實(shí)例也都跟著變了...wuwuwu

自然就有了組合式繼承

function baz(){this.oo="";}baz.prototype.xx=function(){}function foo(){baz.call(this);//第二次調(diào)用}foo.prototype=new baz();//第一次調(diào)用var myFoo=new foo();myFoo.oo;myFoo.xx;

這樣就會(huì)有一個(gè)問題,代碼里也表明出來了,baz會(huì)被調(diào)用兩次,身為處女座的怎么可以允許呢..

插一句,第二種方式就不用出現(xiàn)第一種方式的問題嗎?答案是不會(huì)的。

原因是屬性的查找是先從對(duì)象自身開始,沒找到才會(huì)去原型中去找,call時(shí)就把屬性給繼承了。

再插一句,那這樣只使用call繼承不就行了嗎?如果不使用原型這個(gè)是可行的,但是作為處女座怎么能不使用原型呢,

在原型上方法是共享的,這樣性能就好了很多呀。

寄生組合式繼承

__extends=function (p,c){function ctor(){this.constructor=c;//賦值構(gòu)造函數(shù)}ctor.prototype=p.prototype;c.prototype=new ctor();}function baz(){this.oo=[1];}baz.prototype.xx=function(){}__extends(baz,foo);function foo(){baz.call(this);}var myFoo=new foo();myFoo.oo;myFoo.xx;

這樣不但解決了兩次調(diào)用的問題,還解決了對(duì)象調(diào)用構(gòu)造函數(shù)時(shí)調(diào)用的是真實(shí)的創(chuàng)建對(duì)象的函數(shù)而不是原型鏈上其他的構(gòu)造函數(shù)。

代碼里有表明。

構(gòu)造函數(shù)是原型對(duì)象上的一個(gè)屬性,是對(duì)象的創(chuàng)建者。由于我們的原型屬性被從新賦值了所以構(gòu)造函數(shù)時(shí)繼承來的。

這里要說一下,對(duì)象是怎樣創(chuàng)建,也就是new都干了些什么。

例如:

var a=new b();

其實(shí)是這樣的,a={};創(chuàng)建了一個(gè)給a,然后b.call(a);call里初始化a,在call之前還有一步,就是a的內(nèi)部原型對(duì)象

設(shè)置為b的原型屬性指向的原型對(duì)象。原型上有構(gòu)造函數(shù)屬性,構(gòu)造函數(shù)用來創(chuàng)建對(duì)象分配內(nèi)存控件。

大概就這些...看看時(shí)間也不早了,碎吧,保持平和的心態(tài)切勿浮躁,努力去改變明天,希望一切都會(huì)慢慢變好。

以上就是小編為大家?guī)淼娜胬斫釰avaScript中的繼承(必看)的全部?jī)?nèi)容了,希望大家多多支持腳步之家。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿鲁科尔沁旗| 祁连县| 额济纳旗| 安仁县| 抚松县| 西宁市| 新宁县| 阳原县| 太原市| 乌鲁木齐市| 青海省| 铜山县| 正定县| 神池县| 罗城| 罗平县| 宿州市| 上栗县| 乌鲁木齐县| 普宁市| 冷水江市| 伊吾县| 阜南县| 常山县| 宿州市| 永寿县| 荥经县| 临沭县| 阳原县| 曲阜市| 海口市| 开鲁县| 河南省| 朝阳市| 香格里拉县| 米泉市| 通化市| 林口县| 营山县| 容城县| 定州市|