小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 nbtymm 2006-12-29

1.1. 繼承

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

查了一些帖子,自己又寫了幾個(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ì)象繼承之后,我開始面臨到第二個(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();

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

}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多