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

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

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

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    js的對(duì)像編程

    定義類或?qū)ο?br /> http://www.iwms.net/n1982c17.aspx

    定義類或?qū)ο?br />
    雖然ECMAScript越來越正規(guī)化了,但創(chuàng)建對(duì)象的方法卻被置之不理。在高級(jí)的編程語言(如C#)中,創(chuàng)建對(duì)象的方法被明確的定義了。所以不會(huì)有太大的分歧。但在腳本語言中創(chuàng)建對(duì)象的方法就是多種多樣了。
    4.1 工廠方式
    由于對(duì)象的屬性可在對(duì)象創(chuàng)建后動(dòng)態(tài)定義,所以許多開發(fā)者都在初次引入JavaScript時(shí)編寫類似下面的代碼:
    Var oCar=new Object();
    oCar.color="red";
    oCar.doors=4;
    oCar.mpg=23;
    oCar.showColor=function(){alert(this.color);};
    在這段代碼中,創(chuàng)建對(duì)象car。然后給它設(shè)置幾個(gè)屬性:它的顏色是紅色,有四個(gè)門,每加侖油23英里。最后一個(gè)屬性是指向函數(shù)的指針,意味著該屬性其實(shí)是個(gè)方法。執(zhí)行這段代碼后,就可以使用對(duì)象car了。可是要?jiǎng)?chuàng)建多個(gè)car實(shí)例就麻煩了。
    要解決此問題,開發(fā)者可以創(chuàng)建并返回特定類型的對(duì)象的工廠函數(shù)。例如,函數(shù)CreateCar()可用于封裝前面列出的創(chuàng)建car對(duì)象的操作:
    Function createCar()
    {
    Var oTempCar=new Object();
    oTempCar.color="red";
    oTempCar.doors=4;
    oTempCar.mpg=23;
    oTempCar.showColor=function(){alert(this.color)};

    return oTempCar;
    }
    Var oCar1=createCar();
    Var oCar2=createCar();
    這里,前面的所有代碼都包含在createCar()函數(shù)中,此外還有一行額外的代碼,返回Car對(duì)象作為函數(shù)值。調(diào)用此函數(shù)時(shí),將創(chuàng)建新對(duì)象,并賦予它 所有必要的屬性,復(fù)制出一個(gè)前面說明的car對(duì)象。使用該方法,可以容易地創(chuàng)建car對(duì)象的兩個(gè)版本,他們的屬性完全一樣。當(dāng)然,還可以修改 creatCar()函數(shù),給它傳遞各個(gè)屬性的默認(rèn)值,而不是賦予屬性默認(rèn)值:
    Function createCar(sColor,iDoors,iMpg)
    {
    Var oTempCar=new Object();
    oTempCar.color= sColor;
    oTempCar.doors= iDoors;
    oTempCar.mpg= iMpg;
    oTempCar.showColor=function(){alert(this.color)};
    return oTempCar;
    }

    Var oCar1=createCar("red",4,23);
    Var oCar2=createCar("blue",2,26);
    oCar1.showColor();      // 輸出"red"
    oCar2.showColor();      // 輸出"blue"
    給createCar()函數(shù)加上參數(shù),即可為要?jiǎng)?chuàng)建的car對(duì)象的color、doors和mpg屬性賦值。使這兩個(gè)對(duì)象具有相同的屬性,卻有不同的屬 性值。但這里有個(gè)問題:每次調(diào)用函數(shù)createCar(),都要?jiǎng)?chuàng)建新函數(shù)showColor(),意味著每個(gè)對(duì)象都有自己的showColor()版 本。事實(shí)上,每個(gè)對(duì)象用的都是同一段代碼。這樣的定義方法還有一個(gè)如下的變形:
    Function Car(sColor,iDoors,iMpg)
    {
    this.color= sColor;
    this.doors= iDoors;
    this.mpg= iMpg;
    this.showColor=function(){alert(this.color)};
    }
    Var oCar1=new Car("red",4,23);
    Var oCar2=new Car("blue",2,26);
    oCar1.showColor();      // 輸出"red"
    oCar2.showColor();      // 輸出"blue"
    這個(gè)方法和上一個(gè)方法有個(gè)一樣的缺陷:重復(fù)的創(chuàng)建了showColor()函數(shù)。為了解決這個(gè)缺陷我們可以用下面的方法。
    4.2 原型方式
    該方法利用了對(duì)象的Prototype屬性。用空構(gòu)造函數(shù)來設(shè)置類名,然后所有的屬性和方法都被直接賦予prototype屬性:
    Function Car()
    {}

    Car.prototype.color="red";
    Car.prototype.doors=4;
    Car.prototype.mpg=23;
    Car.prototype.showColor=function(){alert(this.color)};
    Var oCar1=new Car();
    Var oCar2=new Car();
    使用這個(gè)方法可以解決重復(fù)創(chuàng)建showColor()函數(shù),但又會(huì)有新的問題,考慮下面的例子:
    Function Car()
    {}
    Car.prototype.color="red";
    Car.prototype.doors=4;
    Car.prototype.mpg=23;
    Car.prototype.drivers=new Array("Mike","Sue");
    Car.prototype.showColor=function(){alert(this.color)};

    Var oCar1=new Car();
    Var oCar2=new Car();

    oCar1.drivers.push("Matt");

    alert(oCar1.drivers);    // 輸出"Mike,Sue,Matt"
    alert(oCar2.drivers);    // 輸出"Mike,Sue,Matt"
    這里,屬性drivers是指向Array對(duì)象的指針。改變指針指向的內(nèi)容,所有的實(shí)例都會(huì)改變。看來這種方法也不可取
    4.3 混合方式
    這種方式就是用構(gòu)造函數(shù)定義對(duì)象的所有非函數(shù)屬性,用原型方式定義對(duì)象的函數(shù)屬性(方法)。結(jié)果所有的函數(shù)只創(chuàng)建一次,而每個(gè)對(duì)象都具有自己的對(duì)象屬性實(shí)例。
    Function Car(sColor,iDoors,iMpg)
    {
    this.color= sColor;
    this.doors= iDoors;

    this.mpg= iMpg;
    Car.drivers=new Array("Mike","Sue");
    }
    Car.prototype.showColor=function(){alert(this.color)};

    Var oCar1=new Car("red",4,23);
    Var oCar2=new Car("blue",3,25);

    oCar1.drivers.push("Matt");

    alert(oCar1.drivers);    // 輸出"Mike,Sue,Matt"
    alert(oCar2.drivers);    // 輸出"Mike,Sue"
    這種方式是ECMAScript主要采用的方式,它具有其他方式的特性,卻沒有它們的缺陷。在實(shí)際編程中應(yīng)用的也是最多了。
    另外還有JSON創(chuàng)建方式。其創(chuàng)建的方式如下:
    var Car =
    {
    color: "red",
    doors: 4,
    mpg: 23,
    drivers: [{name: "Mike", age: 20, Married: false}, {name: "Sue", age: 30, Marred: true}],
    showColor: function() {alert(this.color)}
    };
    這種創(chuàng)建對(duì)象的方式也比較優(yōu)雅。可作為Ajax返回的文本,然后用eval()函數(shù)將其還原成一個(gè)對(duì)象。著名的腳本框架JQuery就有專門接收返回文本為JSON對(duì)象的異步方法。

    posted on 2009-07-09 09:02 找個(gè)美女做老婆 閱讀(256) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 99视频免费观看| 99视频免费播放| 亚洲va在线va天堂va888www| 一级毛片aaaaaa免费看| 亚洲一区精彩视频| mm1313亚洲精品国产| 免费看成人AA片无码视频吃奶| 亚洲AV成人片色在线观看高潮| 成人黄色免费网站| 国产亚洲欧美在线观看| 亚洲乱码一区二区三区在线观看| 9277手机在线视频观看免费| 亚洲大尺度无码无码专线一区| 亚洲一区二区三区AV无码| 日本亚洲免费无线码| 黄页网址在线免费观看| 久久亚洲AV成人无码软件| 国产jizzjizz免费视频| 久久免费动漫品精老司机| 亚洲AV无码成人精品区日韩 | 亚洲精品视频在线观看视频| 日韩免费无砖专区2020狼| 野花香高清视频在线观看免费| 亚洲人成人伊人成综合网无码| 亚洲春色在线视频| 免费一级做a爰片性色毛片| 91免费国产精品| jizz免费一区二区三区| 亚洲中文字幕无码亚洲成A人片 | 亚洲午夜精品在线| 亚洲色欲色欲www在线丝| 午夜一级免费视频| 98精品全国免费观看视频| 九九免费精品视频在这里| 国产精品亚洲专区在线观看| 亚洲AV无码乱码国产麻豆| 亚洲国产一区明星换脸| 四色在线精品免费观看| 久久精品国产免费观看| 久久精品成人免费网站| 一级免费黄色大片|