JavaScript中的prototype,即構造函數的原型對象,我想對于使用過JavaScript oo模式編程的你來說,肯定都能很好的利用prototype的特性來編寫出優美的面向對象的代碼,因為它的確很好用。但是你真的足夠了解prototype嗎?
首先我覺得,在分析prototype之前,應該先了解為什么要使用prototype來實現繼承,而并不是把所有屬性寫到構造函數內部,那么這樣做優勢體現在哪里呢,如果你跟我有一樣的困惑,請看如下兩段代碼:
[js]代碼:
/*代碼1*/
var F = function(){
this.a = 1;
this.b = 2;
this.c = 3;
this.d = 4;
this.e = 5;
this.f = 6;
};
for(var i=0;i<100000;i++){
eval('var f' + i + '= new F;');
}
/*代碼2*/
var F = function(){};
F.prototype = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: 6
};
for(var i=0;i<100000;i++){
eval('var f' + i + '= new F;');
}
在瀏覽器中分別執行兩段代碼,觀察瀏覽器的內存占用情況(數據量比較大,等待腳本執行完畢,瀏覽器穩定后的數據),如下圖:
從圖片中的數據不難看出,在Firefox中,把所有屬性全部寫到構造的原型對象中,生成100000個實例對象時,占用內存會比把所有屬性全部寫到構造內部少15M,而在IE中,這個差距竟然達到97M,匪夷所思啊,神奇的IE。這也就是為什么寫oo代碼時,總是喜歡把類的一些屬性和方法寫到它的原型對象中,在達到同樣目的的前提下節省內存的使用率,我想沒有哪一個人愿意拒絕這樣的做法。
更多信息請查看IT技術專欄