免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
【web】面向?qū)ο蟮膉avascript - 應(yīng)用,一定要應(yīng)用 - BlogJava

1.1. 繼承

今天遇到了需要在 javascript 中繼承的問(wèn)題:

查了一些帖子,自己又寫(xiě)了幾個(gè)例子測(cè)試了一下,總結(jié)如下:

1.1.1.     三種方法

js 中實(shí)現(xiàn)繼承有三種方法:

假設(shè)父類為 Parent, 子類為 Child,

 

第一種,子類強(qiáng)制調(diào)用父類構(gòu)造

function Child(){

       Parent.call(this);

}

 

第二種,子類間接調(diào)用父類構(gòu)造

function Child(){

       this.base = Parent;

       this.base();

}

 

第三種:設(shè)置原型

function Child(){}

Child.prototype = new Parent();

這種方式雖然不夠直觀,卻應(yīng)該是最有效率的方式。

 

1.1.2.     總結(jié):

其實(shí) js 本身是沒(méi)有什么繼承之類的概念的,只是為了使用利用 js 的一些特性而加的。

 

js 的原型方式 prototype, 使得許多的工作變得容易。

 

一個(gè) function 對(duì)象和根據(jù) function 構(gòu)造出來(lái)的對(duì)象是不同的。

 

一個(gè) function 對(duì)象的原型其實(shí)就是一個(gè)根據(jù) function 對(duì)象構(gòu)建出來(lái)的對(duì)象。

記?。哼@個(gè)對(duì)象可與 new 出來(lái)的對(duì)象不一樣。在 function 內(nèi)部的代碼并不會(huì)被執(zhí)行,如:

this.funcName = function() 這樣的代碼。而 new 出來(lái)的對(duì)象則不然,他具有執(zhí)行后的對(duì)象特性。

 

function 的局部變量相當(dāng)于 class 里的私有變量,無(wú)法在子類中獲取和操作。但 this. 的部分是可以的。

 

1.1.3.     猜測(cè)和假想

(這是我推斷的,沒(méi)有任何的根據(jù),當(dāng)然也是可以測(cè)試的):

當(dāng)一個(gè) Child new 時(shí),第一二種方法中, js 執(zhí)行器

1 、先分配一個(gè)空間,(相當(dāng)于 this = new Object() (msdn 中有具體的描述 )

2 、拷貝原型:

3 、執(zhí)行構(gòu)造:也就是 Child.call(this) (相當(dāng)于 child(), 此時(shí) this 對(duì)象有值)( msdn 中有描述)

然后執(zhí)行 Parent(); 這個(gè)時(shí)候 parent 的構(gòu)造函數(shù)執(zhí)行以下幾步:

1 、將 parent prototype 拷貝到 object 區(qū)域,這時(shí)覆蓋了前面的區(qū)域 ( 好像測(cè)試證明 parent 的原型并不會(huì)被拷貝,此步不會(huì)被執(zhí)行 )

2 、對(duì)這個(gè)區(qū)域執(zhí)行初始化,也就是正常的 function 調(diào)用的過(guò)程。(相當(dāng)于 Parent(),this 變量有值)

 

而普通的 function 調(diào)用應(yīng)該是這個(gè)樣子:由于沒(méi)有 new 操作符,所以沒(méi)有為其分配當(dāng)前的 this( 也沒(méi)有空間 ),

this 被放到了 window 對(duì)象上。但是 new 的時(shí)候顯然不是這樣。

 

obj.func() 的調(diào)用和 func() 調(diào)用是完全不一樣的, obj.func this 對(duì)象是 obj 對(duì)象,而 func() 調(diào)用 this 對(duì)象是 window 對(duì)象,這個(gè)應(yīng)該和 jvm 中靜態(tài)方法和類實(shí)例方法調(diào)用的區(qū)別的原理一樣。

 

1.2. 方法重載

在實(shí)現(xiàn)了對(duì)象繼承之后,我開(kāi)始面臨到第二個(gè)問(wèn)題,重載。

1.1.4.     兩種方法

js 怎樣實(shí)現(xiàn)重載。

1 、簡(jiǎn)單的重載:

在這種重載中,子類的方法無(wú)需調(diào)用父類的方法,直接在執(zhí)行父類構(gòu)造之后,再執(zhí)行子類的重載方法,如 Parent toString() 方法,這時(shí)只需執(zhí)行 this.toString = function(){....} 就可以了。

 

2 、調(diào)用父類方法的重載:

由于 js 實(shí)際運(yùn)行時(shí)并沒(méi)有父類、子類兩個(gè)實(shí)例空間,所以 super.toString() 肯定是不行的,而在子類的 toString 方法中進(jìn)行 this.toString() 調(diào)用只能引起內(nèi)存溢出,其實(shí)這種也可以想辦法做到。

 

this.super_toString = this.toString();

this.toString=function(){

       ..............

       this.super_toString();

       ..............

}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
誠(chéng)之和:如何掌握前端JavaScript中的class類
淺談多態(tài)
JavaScript中的類繼承
領(lǐng)悟 JavaScript 中的面向?qū)ο?- JavaScript - web - Jav...
58個(gè)面向 Web 開(kāi)發(fā)人員的JavaScript技巧匯總
JavaScript中的apply和call函數(shù)詳解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服