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

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

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

    Flyingis

    Talking and thinking freely !
    Flying in the world of GIS !
    隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
    數(shù)據(jù)加載中……

    JavaScript 中的對象(下)

    ??? 作者:Flyingis

    5? 自定義類和對象

    5.1? 工廠方法

    ??? 在ECMAScript中創(chuàng)建工廠方法,返回一個特定類型的對象,以此實現(xiàn)代碼的簡潔適用。

    function?createFruit()?{
    ??
    var?tempFruit?=?new?Object;
    ??tempFruit.name?
    =?"apple";
    ??tempFruit.number?
    =?5;
    ??tempFruit.showName?
    =?function()?{
    ????alert(
    this.name);
    ??}
    ;
    return?tempFruit;
    }


    var?Fruit1?=?creatFruit();
    var?Fruit2?=?creatFruit();

    ??? 在createFruit()中可以加入形參來傳入?yún)?shù)的值。隨著ECMAScript不斷被規(guī)范化,這種創(chuàng)建對象的方法已不再流行,一部分原因是語法上的,一部分原因是功能上的,如每個對象的實例都擁有屬于自己的showName方法,給內(nèi)存管理帶來一定的開銷。

    5.2? 構(gòu)造函數(shù)

    ??? 選擇一個類名,第一個字母大寫,該類名即是構(gòu)造函數(shù)的名稱。創(chuàng)建一個構(gòu)造函數(shù)和工廠方法比較類似,不同的是需要使用關(guān)鍵字new來創(chuàng)建對象的引用。使用構(gòu)造函數(shù)的方式來創(chuàng)建對象和使用工廠方法有著相同的弊端。

    function?Fruit(name,?number)?{
    ??
    this.name?=?name;
    ??
    this.number?=?number;
    ??
    this.showName?=?function()?{
    ????alert(
    this.name);
    ??}
    ;
    }


    var?Fruit1?=?new?Fruit("apple",?5);
    var?Fruit2?=?new?Fruit("pear",?3);

    5.3? 使用 Prototype

    ??? 使用prototype屬性可以用來創(chuàng)建新的對象,首先需要一個空的構(gòu)造函數(shù)建立類的名稱,然后所有的屬性和方法都直接分配到prototype屬性中。

    function?Fruit()?{
    }

    Fruit.prototype.name?
    =?"apple";
    Fruit.prototype.number?
    =?5;
    Fruit.prototype.showName?
    =?function()?{
    ??alert(
    this.name);
    }
    ;

    var?fruit1?=?new?Fruit();
    var?fruit2?=?new?Fruit();

    ??? 但是,這樣同樣存在一些缺點。首先,構(gòu)造函數(shù)中沒有參數(shù),給初始化帶來一些麻煩,其次,當一個屬性指向的是一個對象而非方法時,該對象會被所有的實例所共享,任何一點改動都會影響到其他對象引用的使用。

    5.4? 混合使用工廠方法和Prototype

    這個概念很簡單:使用構(gòu)造函數(shù)定義所有除方法外的屬性,使用 prototype 定義對象的方法。這樣每個方法只會被創(chuàng)建一次,每個對象都能擁有自己對象實例的屬性。

    function?Fruit(name,?number)?{
    ??
    this.name?=?name;
    ??
    this.number?=?number;
    ??
    this.owner?=?new?Array("Jerry",?"Terry");
    }

    Fruit.prototype.showName?
    =?function()?{
    ??alert(
    this.name);
    }
    ;

    var?Fruit1?=?new?Fruit("apple",?5);
    var?Fruit2?=?new?Fruit("pear",?3);

    5.5? 動態(tài) prototype

    ??? 簡單來說,這種方法就是使用了一個標識符來判斷 prototype 是否已經(jīng)被指向某個方法,從而保證這些方法只會被創(chuàng)建并指向一次。

    5.6? 混合工廠方法

    ??? 這種方法和經(jīng)典的工廠方法及構(gòu)造函數(shù)方法在對象方法內(nèi)存管理上存在同樣的問題,一般不建議使用該方法,除了某些特殊情況(XML in JavaScript中有這樣的例子)。

    6? 修改對象

    ??? 使用prototype對象可以對對象進行修改。除了用戶自定義的對象外,ECMAScript原始對象也有prototype屬性。直接使用 prototype可以給對象創(chuàng)建新的方法。

    Number.prototype.toHexString?=?function()?{
    ??
    return?this.toString(16);
    }
    ;
    var?iNum?=?10;
    alert(iNum.toHexString());??
    //輸出A

    ??? 另外,使用prototype可以輕松修改已有的方法,讓方法名指向新的方法。需要注意的是,指向新的方法后,原有的方法不再被任何對象使用,將會被垃圾回收器銷毀,使得原有方法不再存在。比較安全的解決辦法是,建立一個新的引用來保存原有的方法,然后再將原方法覆蓋。

    ??? 比較特殊的是,ECMAScript中創(chuàng)建對象,在對象引用被創(chuàng)建后,可以給對象加入新的方法,并且可以立即在對象的引用中使用。這是ECMAScript的一個特性,但不推薦這樣使用,以免帶來不必要的麻煩,例如閱讀理解、文檔資料等。

    posted on 2006-07-03 14:02 Flyingis 閱讀(3964) 評論(3)  編輯  收藏 所屬分類: Web 客戶端技術(shù)

    評論

    # re: JavaScript 中的對象(下)  回復(fù)  更多評論   

    function Fruit(name, number) {
    this.name = name;
    this.number = number;
    this.owner = new Array("Jerry", "Terry");
    }
    Fruit.prototype.showName = function() {
    alert(this.name);
    };

    var Fruit1 = new Fruit("apple", 5);
    var Fruit2 = new Fruit("pear", 3);
    2006-11-08 15:35 | aa

    # re: JavaScript 中的對象(下)  回復(fù)  更多評論   

    javascript自定義的對象會不會被頁面自動緩存??
    2007-05-29 10:44 | Vin

    # re: JavaScript 中的對象(下)  回復(fù)  更多評論   

    @Vin
    頁面下載js在客戶端執(zhí)行,js對象占用內(nèi)存,但不會在頁面緩存。
    2007-05-29 11:05 | Flyingis
    主站蜘蛛池模板: 亚洲无删减国产精品一区| 亚洲人成在久久综合网站| 亚洲av永久无码精品天堂久久 | 免费大黄网站在线观看| 亚洲AV无码欧洲AV无码网站| 亚洲日本VA中文字幕久久道具| 久草免费福利在线| 成人在线免费观看| 亚洲免费人成在线视频观看| 在线精品亚洲一区二区| 最近2019中文免费字幕在线观看 | 亚洲国产黄在线观看| 亚洲色偷偷av男人的天堂| 牛牛在线精品观看免费正| 国产精品色拉拉免费看| 久久乐国产精品亚洲综合| 亚洲毛片基地4455ww| 免费在线观影网站| 免费99热在线观看| 亚洲国产av一区二区三区丶| 九九热久久免费视频| 国产一区二区三区免费在线观看| 久久精品国产亚洲AV无码娇色| 极品美女一级毛片免费| 国产成人午夜精品免费视频| 亚洲精品无码永久在线观看你懂的| 亚洲欧美日韩综合久久久久| 免费人成视频在线观看网站| 亚洲日韩在线中文字幕第一页| 亚洲国产区男人本色在线观看| 精品在线免费观看| 亚洲国产精品一区二区九九| 亚洲高清视频在线| 57pao国产成视频免费播放| 亚洲乱码一区二区三区在线观看| 蜜桃传媒一区二区亚洲AV| 国产精品色拉拉免费看| 亚洲好看的理论片电影| 国产中文字幕在线免费观看| 亚洲第一网站男人都懂| 亚洲av无码偷拍在线观看|