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

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

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

    Alex刺客

    Dancing fingers, damage world. -- 舞動(dòng)手指,破壞世界.

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      57 隨筆 :: 0 文章 :: 76 評(píng)論 :: 0 Trackbacks
      1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2<html xmlns="http://www.w3.org/1999/xhtml">
      3    <head>
      4        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5        <title>定義類(lèi)或?qū)ο?/span></title>
      6        <script type="text/javascript">
      7            /*
      8            *    項(xiàng)目: book -> Javascript高級(jí)程序設(shè)計(jì).pdf -> 第3章 -> 3.5定義類(lèi)或?qū)ο?br />   9            *
     10            *    說(shuō)明:    以下代碼有 工廠方式,構(gòu)造函數(shù)方式,原型方式,混合的構(gòu)造函數(shù)+原型方式,動(dòng)態(tài)原型方式,混合工廠方式定義類(lèi)或?qū)ο?br />  11            *
     12            *     對(duì)JavaScript來(lái)說(shuō)很有意思的一句話:構(gòu)造函數(shù)只是函數(shù),函數(shù)是對(duì)象,對(duì)象可以有屬性和方法,屬性可以是函數(shù),函數(shù)也是類(lèi),
     13            *    函數(shù)也叫方法。(一切都很抽象。^_^,對(duì)初學(xué)者來(lái)說(shuō)在代碼中理解這句話很有幫助!)。
     14            *
     15            *    練習(xí)者: Alex刺客
     16            *
     17            *    日期: 2009-12-13
     18            */

     19            
     20            /*
     21                【 一 】.工廠方式
     22             */

     23             
     24             var oCar1 = new Object;
     25             oCar1.color = "red";
     26             oCar1.doors = 4;
     27             oCar1.mpg = 23;
     28             oCar1.showColor = function () {
     29                alert(this.color);
     30             }

     31             // oCar1.showColor();
     32             
     33             /*
     34                以上說(shuō)明:因?yàn)閷?duì)象的屬性可在對(duì)象創(chuàng)建后動(dòng)態(tài)定義。
     35                    創(chuàng)建對(duì)象oCar1。然后給它設(shè)置幾個(gè)屬性:它的顏色是紅色,
     36                    有四個(gè)門(mén),每加侖油可跑23英里。最后一個(gè)屬性實(shí)際上是指向函數(shù)的指針,
     37                    意味著該屬性是個(gè)方法。問(wèn)題是這樣不能創(chuàng)建多個(gè)oCar1的實(shí)例。
     38                
     39                于是就有了以下方式
     40             */

     41             
     42             function createCar(){
     43                var oTempCar = new Object;
     44                oTempCar.color = "red";
     45                oTempCar.doors = 4;
     46                oTempCar.mpg = 23;
     47                oTempCar.showColor = function () {
     48                    alert(this.color);
     49                }

     50                return oTempCar;
     51             }

     52             
     53             //var oCar1 = createCar();
     54             //var oCar2 = createCar();
     55             //oCar1.showColor();
     56             //oCar2.showColor();
     57             
     58             /*
     59                以上說(shuō)明:這樣就可以創(chuàng)建多個(gè)實(shí)例了,因?yàn)轫氁? 類(lèi) "時(shí)可以調(diào)用createCar()
     60                    函數(shù)。此函數(shù)返回創(chuàng)建好的oTempCar" 類(lèi) "。
     61                    
     62                    為了能讓他接收消息請(qǐng)看下面例子
     63             */

     64             
     65             function createCar1 (sColor, iDoors, iMpg) {
     66                var oTempCar = new Object;
     67                oTempCar.color = sColor;
     68                oTempCar.doors = iDoors;
     69                oTempCar.mpg = iMpg;
     70                oTempCar.showColor = function () {
     71                    alert(this.color);
     72                }

     73                return oTempCar;
     74             }

     75             
     76             //var oCar1 = createCar1('red',4,23);
     77             //var oCar2 = createCar1('bule',3,18);
     78             //oCar1.showColor();
     79             //oCar2.showColor();
     80             
     81             /*
     82                以上說(shuō)明:第1點(diǎn),當(dāng)我看懂這段代碼時(shí),我才知道原來(lái)JavaScript這么有趣,
     83                對(duì)象可以不用 new !用new 也一樣的結(jié)果。而且每次調(diào)用函數(shù)createCar1(),
     84                都要?jiǎng)?chuàng)建新函數(shù)showColor(),意味著每個(gè)對(duì)象都有自己的showColor()版本。
     85                事實(shí)上,每個(gè)對(duì)象都共享了同一個(gè)函數(shù)。
     86                
     87                為了消除反復(fù)創(chuàng)建函數(shù)showColor() 繼續(xù)往下看
     88             */

     89             
     90             function showColor () {
     91                alert(this.color);
     92             }

     93             
     94             function createCar2 (sColor, iDoors, iMpg) {
     95                var oTempCar = new Object;
     96                oTempCar.color = sColor;
     97                oTempCar.doors = iDoors;
     98                oTempCar.mpg = iMpg;
     99                oTempCar.showColor = showColor;
    100                return oTempCar;
    101             }

    102             
    103             //var oCar1 = createCar2("red", 4, 23);
    104             //var oCar2 = createCar2("blue", 3, 18);
    105             //oCar1.showColor();
    106             //oCar2.showColor();
    107             
    108             /*
    109                以上說(shuō)明:在createCar2()函數(shù)之前定義showColor()方法,在createCar2()內(nèi)部,
    110                賦予對(duì)象一個(gè)指向已經(jīng)存在的showColor()函數(shù)的指針。這樣解決了重復(fù)創(chuàng)建函數(shù)
    111                對(duì)象的問(wèn)題.。但該函數(shù)看起來(lái)不像對(duì)象的方法。
    112             */

    113             
    114             /*
    115                    【 二 】構(gòu)造函數(shù)方式
    116                    Car在這也叫函數(shù)名,也叫類(lèi)名
    117             */

    118             function Car (sColor, iDoors, iMpg) {
    119                this.color = sColor;
    120                this.doors =iDoors;
    121                this.mpg = iMpg;
    122                this.showColor = function () {
    123                    alert(this.color);
    124                }

    125             }

    126             
    127             //var oCar1 = new Car("red", 4, 23);
    128             //var oCar2 = new Car("blue", 3, 18);
    129             //oCar1.showColor();
    130             //oCar2.showColor();
    131             
    132             /*
    133                以上說(shuō)明:構(gòu)造函數(shù)內(nèi)部不再創(chuàng)建Object對(duì)象,而是使用了this關(guān)鍵字,所以要
    134                使用new運(yùn)算符來(lái)調(diào)用該構(gòu)造函數(shù)(即所謂的" 類(lèi) "),同是在執(zhí)行第一行代碼前先創(chuàng)
    135                建一個(gè)對(duì)象,只有用this才能訪問(wèn)該對(duì)象(當(dāng)前new所創(chuàng)建的對(duì)象)。然后可直接賦予this屬性,默認(rèn)情況下是
    136                構(gòu)造函數(shù)的返回值(不必明確使用 return)。但這種方式就像工廠函數(shù)一樣,也會(huì)重復(fù)
    137                生成showColor()函數(shù)。
    138             */

    139             
    140             /*
    141                【 三 】原型方式
    142                看見(jiàn)這原型這兩個(gè)字,就讓我想起了虐殺原型^_^。
    143                
    144                這種方式利用了對(duì)象的prototype屬性,可把它看成創(chuàng)建新對(duì)象所依賴的原型,
    145                這里,用空構(gòu)造函數(shù)來(lái)設(shè)置類(lèi)名。然后所有的屬性和方法都被直接賦予prototype屬性。
    146             */

    147             
    148             function Car1() {}
    149             
    150             Car1.prototype.color = "red";
    151             Car1.prototype.doors = 4;
    152             Car1.prototype.mpg = 23;
    153             Car1.prototype.drivers = new Array("Mike","Sue");
    154             Car1.prototype.showColor = function () {
    155                alert(this.color);
    156             }

    157             
    158              //var oCar11 = new Car1();
    159              //var oCar12 = new Car1();
    160             
    161             /*
    162                以上說(shuō)明: 首先定義函數(shù) Car1 ,基中無(wú)任何代碼,再通過(guò)給 Car1 的prototype 屬性添加
    163                屬性(color,doors,mpg,showColor)去定義Car1對(duì)象的屬性。調(diào)用new Car1() 時(shí),原型
    164                所有屬性都被立即賦予要?jiǎng)?chuàng)建的對(duì)象,意味著所有Car1實(shí)例存方的都是指向showColor()函
    165                數(shù)的指針。從語(yǔ)義上講,所有屬性看起來(lái)都屬于一個(gè)對(duì)象。使用該方法還能用instanceof運(yùn)算符
    166                檢查給定變量的對(duì)象類(lèi)型。
    167                alert(oCar11 instanceof Car1);  // true
    168                
    169                但是:因?yàn)樗袑傩远际怯昧藀rototype屬性定義的,所以問(wèn)題又出來(lái)了。
    170             */

    171             
    172              //var oCar11 = new Car1();
    173              //var oCar12 = new Car1();
    174              
    175              //oCar11.drivers.push("Matt");
    176              
    177              //alert(oCar11.drivers);
    178              //alert(oCar12.drivers);
    179              
    180              /*
    181                以上說(shuō)明:因?yàn)镃ar1類(lèi)的對(duì)象的drivers屬性是一個(gè)Array數(shù)組對(duì)象的引用(指向它的指針),
    182                當(dāng)Array數(shù)組對(duì)象發(fā)生變化時(shí),所有Car1的對(duì)象的drivers屬性都指向同一個(gè)Array數(shù)組,
    183                所以就產(chǎn)生了以上結(jié)果。
    184              */

    185              
    186              /*
    187                 【 四 】混合的構(gòu)造函數(shù)+原型方式
    188              */

    189              
    190              function Car2 (sColor, iDoors, iMpg) {
    191                this.color = sColor;
    192                this.doors = iDoors;
    193                this.mpg =iMpg;
    194                this.drivers = new Array("Mike","sue");
    195              }

    196              
    197              Car2.prototype.showColor = function (){
    198                alert(this.color);
    199              }

    200              
    201              //var oCar21 = new Car2("red",4,23);
    202              //var oCar22 = new Car2("blue",3,18);
    203              
    204              //oCar21.drivers.push("Matt");
    205              
    206              //alert( oCar21.drivers);
    207              //alert( oCar22.drivers);
    208              
    209              /*
    210                以上說(shuō)明: 用構(gòu)造函數(shù)定義對(duì)象的所有非函數(shù)屬性,用原型方式定義對(duì)象的函數(shù)(方法)。
    211                結(jié)果所有函數(shù)都只創(chuàng)建一次,而每個(gè)對(duì)象都具有自己的對(duì)象屬性的實(shí)例。所有的非函數(shù)
    212                屬性都在構(gòu)造函數(shù)中創(chuàng)建,意味著又可用構(gòu)造函數(shù)的參數(shù)賦予對(duì)象屬性的默認(rèn)值。因?yàn)?br /> 213                Car2類(lèi)的showColor()函數(shù)是用原型屬性定義的,所以Car2類(lèi)的實(shí)例都共同擁有指
    214                向showColor()方法的指針.所以沒(méi)有浪費(fèi)內(nèi)存。
    215              */

    216              
    217              /*
    218                【 五 】動(dòng)態(tài)原型方式
    219                上面的方法唯一點(diǎn)遺憾就是在Car2類(lèi)外面定義的showColor()方法.
    220                這個(gè)就是為了更完美!
    221              */

    222               
    223               function Car3 (sColor, iDoors, iMpg) {
    224                    this.color = sColor;
    225                    this.doors = iDoors;
    226                    this.mpg = iMpg;
    227                    this.drivers = new Array("mike","sue");
    228                    if(typeof Car3._initialized == "undefined"){
    229                        Car3.prototype.showColor = function (){
    230                            alert(this.color);
    231                        }

    232                        Car3._initialized = true;
    233                        alert("以后我都不執(zhí)行了!");
    234                    }

    235               }

    236               
    237               var car31 = new Car3("red",4,23);
    238               var car33 = new Car3("blue",3,18);
    239              
    240              /*
    241                以上說(shuō)明:因?yàn)橹辉贑ar3類(lèi)第一次創(chuàng)建實(shí)例時(shí),只執(zhí)行一次創(chuàng)建showColor()方法.
    242                再以后創(chuàng)建Car3類(lèi)的實(shí)例時(shí)都不執(zhí)行了。而且這個(gè)類(lèi)的全部成員,都在此類(lèi)內(nèi)部,
    243                看著更像一個(gè)類(lèi)。
    244              */

    245              
    246              /*
    247                【 六 】混合工廠方式
    248                
    249                這個(gè)方式我至今還沒(méi)看懂,只在工廠方式定義好的函數(shù)前使用了一個(gè)new 不知道有什么好處!
    250                請(qǐng)高手賜教!
    251              */

    252              
    253              function Car4 () {
    254                var oTempCar = new Object;
    255                oTempCar.color = "red";
    256                oTempCar.doors = 4;
    257                oTempCar.mpg = 23;
    258                oTempCar.showColor = function () {
    259                    alert(this.color);
    260                }

    261                return oTempCar;
    262              }

    263              
    264              var cat4 = new Car4();
    265              
    266              /*
    267                提示:在jjavaScritpt中創(chuàng)建類(lèi)最好的方式是用構(gòu)造函數(shù)定義屬性,用原型定義方法。
    268              */

    269        </script>
    270    </head>
    271    <body>
    272    </body>
    273</html>
    主站蜘蛛池模板: 亚洲AV永久无码精品成人| 亚洲欧美在线x视频| 中文字幕免费在线看电影大全| 亚洲人成电影网站免费| 国产亚洲一区二区三区在线| 亚洲欧美日韩自偷自拍| 67194国产精品免费观看| 中文字幕不卡亚洲| 日本亚洲高清乱码中文在线观看 | 精品久久久久久国产免费了| 午夜寂寞在线一级观看免费| 亚洲精品mv在线观看| 久久国产乱子精品免费女| 亚洲日韩在线观看| 国产亚洲精品成人久久网站| 无码视频免费一区二三区| 亚洲日本在线播放| 亚洲视频免费在线观看| 亚洲无av在线中文字幕| 午夜不卡AV免费| 国产免费人成在线视频| 亚洲欧美乱色情图片| 一区二区无码免费视频网站| 亚洲综合一区二区| 少妇太爽了在线观看免费视频| 亚洲人精品午夜射精日韩| 久青草国产免费观看| 凹凸精品视频分类国产品免费| 亚洲色精品VR一区区三区| 97性无码区免费| 亚洲国产高清美女在线观看| 88av免费观看| 亚洲综合久久1区2区3区| 蜜桃视频在线观看免费视频网站WWW| 情人伊人久久综合亚洲| 成全视成人免费观看在线看| 亚洲中文字幕伊人久久无码| 一级做a爰片久久毛片免费陪| 亚洲国产成人VA在线观看| 黄页免费视频播放在线播放| 免费大黄网站在线看|