乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       nbtymm 2006-12-29

      1.1. 繼承

      今天遇到了需要在 javascript 中繼承的問題:

      查了一些帖子,自己又寫了幾個例子測試了一下,總結(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 本身是沒有什么繼承之類的概念的,只是為了使用利用 js 的一些特性而加的。

       

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

       

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

       

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

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

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

       

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

       

      1.1.3.     猜測和假想

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

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

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

      2 、拷貝原型:

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

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

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

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

       

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

      this 被放到了 window 對象上。但是 new 的時候顯然不是這樣。

       

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

       

      1.2. 方法重載

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

      1.1.4.     兩種方法

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

      1 、簡單的重載:

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

       

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

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

       

      this.super_toString = this.toString();

      this.toString=function(){

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

             this.super_toString();

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

      }

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多