<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    應(yīng)用,一定要應(yīng)用

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

    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();

    ?????? ..............

    }

    posted on 2006-12-28 14:39 flyffa 閱讀(1236) 評(píng)論(1)  編輯  收藏 所屬分類: 其他應(yīng)用

    Feedback

    # re: 【web】面向?qū)ο蟮膉avascript 2006-12-30 13:08 errorfun
    看看prototype的 Object.extend的實(shí)現(xiàn)吧。  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲高清国产拍精品青青草原| 久久亚洲国产成人精品无码区| 亚洲一级免费毛片| 4hu四虎最新免费地址| 亚洲日本va在线观看| 亚洲免费黄色网址| 亚洲V无码一区二区三区四区观看| 国内精品99亚洲免费高清| 亚洲av永久无码精品表情包| 99久久久国产精品免费牛牛| 亚洲最新黄色网址| 麻豆成人精品国产免费| 免费视频精品一区二区| 亚洲国产一成人久久精品| 18禁止看的免费污网站| 亚洲永久在线观看| 亚洲视频人成在线播放| 五月婷婷免费视频| 亚洲狠狠爱综合影院婷婷| 成人A毛片免费观看网站| 亚洲AV电影天堂男人的天堂 | 国产精品成人亚洲| 亚洲午夜久久久久妓女影院| 午夜理伦剧场免费| 日韩精品成人亚洲专区| 亚洲人成人伊人成综合网无码| 成人午夜免费福利视频| 亚洲VA中文字幕无码一二三区| 日韩电影免费观看| 亚洲中文无码亚洲人成影院| 亚洲av无码专区国产乱码在线观看 | 亚洲成AV人片在线观看无| 成年人视频在线观看免费| 久久免费视频99| 添bbb免费观看高清视频| 亚洲v高清理论电影| 亚洲一区无码中文字幕| 免费人成视频x8x8入口| 韩国欧洲一级毛片免费| 最近中文字幕大全免费视频| 国产中文字幕在线免费观看|