欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 混合的構(gòu)造函數(shù)和原型方式,動態(tài)原型方式

 更新時間:2009年12月07日 19:51:35   作者:  
JS編程中最常用兩種對象類定義的方式。不管是利用下面2種方式的那一種,都可以達到相同的效果!
我們?nèi)粘S編程中最常用的方式 有下面2種:
1.混合的構(gòu)造函數(shù)和原型方式 (重點)
復制代碼 代碼如下:

function car (sColor,iNumbers){ // 構(gòu)造函數(shù)只用來定義對象的所有非函數(shù)屬性,即對象的屬性
this.color = sColor;
this.numbers = iNumbers;
this.dirvers = new Array ("Jone","Leon");
}
car.prototype.showColor = function (){ // 原型方式只用來定義對象的所有函數(shù)屬性,即對象的方法
alert(this.color);
}
var car1 = new car("red");
var car2 = new car("yellow");
car1.showColor)();
car2.showColor)();

總結(jié):當你創(chuàng)建(new)一個新的對象實例car1和car2的時候,car1和car2都繼承函數(shù)對象car的所有的非函數(shù)屬性;此時在car函數(shù)外面給car函數(shù)對象的原型里面生成一個showColor方法,此時car1和car2都會引用car的原型里面的showColor方式,如果把原型方法放進car函數(shù)體里面,那么此時car1和car2不是引用的關(guān)系,而是每執(zhí)行一次函數(shù),就構(gòu)建一次showColor函數(shù),如果有100個car,那么就要重復構(gòu)造100個函數(shù)。所以要把非函數(shù)屬性和函數(shù)屬性分開來寫。
2.動態(tài)原型方式 (重點)
復制代碼 代碼如下:

function car (sColor,iNumbers){ // 構(gòu)造函數(shù)只用來定義對象的所有非函數(shù)屬性,即對象的屬性
this.color = sColor;
this.numbers = iNumbers;
this.dirvers = new Array ("Jone","Leon");
if(typeof car._initialized=="undefined"){ //此時此刻,這里的car._initialized成立,繼續(xù)執(zhí)行下面的函數(shù)
car.prototype.showColor = function (){
alert(this.color);
}
}
car._initialized = true; //
執(zhí)行到這里就停止再也不在執(zhí)行第二次,因為此時此刻,car._initialized只是函數(shù)的屬性,而不是函數(shù)對象的原型屬性,如果是原型屬性的話,new一個函數(shù)對象的實例,就會改變函數(shù)里面原型對象的屬性,那么就會重復構(gòu)造showColor這個函數(shù)。正因為是這個原因,當car._initialized等于undefined的時候,執(zhí)行一次showColor,最后得到的car._initialized=true,這個時候改變的是函數(shù)的屬性,而不是函數(shù)原型的屬性,所以外部new一個對象實例根本無法改變函數(shù)的屬性,所有紅色部分的代碼就是為了做一件事情:只執(zhí)行紅色代碼之間的方法,并且每種方法只有一次,不會重復執(zhí)行!
}
var car1 = new car ("red");
var car2 = new car ("yellow");
car1.showColor();
car2.showColor();

總結(jié):不管是利用上面2種方式的那一種,都可以達到相同的效果!
方法1:混合的構(gòu)造函數(shù)和原型方式,相當于把非函數(shù)屬性和一般屬性分開來寫,這樣new 新對象的時候,不會重復構(gòu)造新函數(shù),此時引用的知識函數(shù)對象的原型方法和函數(shù)對象的屬性。但是,代碼看起來沒有封裝起來而且,不影響任何東西。
方法2:完全利用JAVA的編程代碼風格來實現(xiàn)JS的編程。這樣的好處是讓整個函數(shù)看起來像是把屬性和方法都“封裝”在一個函數(shù)體內(nèi),看起來更像一個“類”。(溫故知新:JS中其實沒有類,你要說有類,就可以把它看做一個function類),缺點是在于利用if()語句看起來不是很友好而已。

相關(guān)文章

  • JS 創(chuàng)建對象(常見的幾種方法)

    JS 創(chuàng)建對象(常見的幾種方法)

    方便學習js類的朋友,讓你快速的掌握js類的定義方法,方法有很多種,結(jié)果都一樣。大家可以根據(jù)自己的愛好選用。
    2008-11-11
  • 一實用的實現(xiàn)table排序的Javascript類庫

    一實用的實現(xiàn)table排序的Javascript類庫

    一實用的實現(xiàn)table排序的Javascript類庫...
    2007-09-09
  • Javascript 面向?qū)ο?命名空間

    Javascript 面向?qū)ο?命名空間

    作用主要為了防止類名沖突,相同的類名只要屬于不同的命名空間,便不會沖突。
    2010-05-05
  • 收集的幾個不錯的javascript類小例子

    收集的幾個不錯的javascript類小例子

    自己比較喜歡javascript類,主要是方便擴展。
    2007-12-12
  • javascript 寫類方式之八

    javascript 寫類方式之八

    這里用的是Ext core3.0,Ext中用Ext.extend來定義一個類(當然它更多用來擴展一個類),Ext整個框架各種控件如Panel,MessageBox等都是用Ext.extend方法來擴展。這里僅僅用它來定義一個最簡單的類。
    2009-07-07
  • 最新評論