javascript實現(xiàn)面向?qū)ο箢惖墓δ軙鴮懠记?/h1>
                          更新時間:2010年03月07日 12:19:14   作者:   
                        
                        經(jīng)過前段時間,學習《ajax完全自學手冊》后,才知道javascript原來還可以這么寫。
                        
                        
                            學過java,c#,vb的都知道類的概念,而類具有繼承、封裝、多態(tài)等功能。而javascript它不是面向?qū)ο笳Z言,它是解釋性語言。 
但我們同樣可以使用javascript來實現(xiàn)繼承、多態(tài)。 
javascript實現(xiàn)類,有多種方法。 
方法一:構(gòu)造方法。 
代碼 
復(fù)制代碼 代碼如下: 
function coder(){ 
this.name = '小王'; 
this.job = '程序員'; 
this.coding = function () 
{ 
alert('我正在寫代碼'); 
} 
} 
var coder=new coder(); 
alert(coder.name); 
coder.coding(); 
 
方法二:工廠方法。 
代碼 
復(fù)制代碼 代碼如下: 
function createCoderFactory(){ 
var obj=new Object(); 
obj.name = '小王'; 
obj.job = '程序員'; 
obj.coding = function (){ 
alert('我正在寫代碼'); 
}; 
return obj; 
} 
var coder = createCoderFactory(); 
alert(coder.name); 
coder.coding(); 
 
但工廠方法和構(gòu)造方法都有著一個相同的缺點,就是每創(chuàng)建一個實例,都會實例化該類的每個函數(shù)。 
方法三:原形鏈。 
代碼 
復(fù)制代碼 代碼如下: 
function coder(){} 
coder.prototype.name = '小王'; 
coder.prototype.job = '程序員'; 
coder.prototype.coding = function(){ 
alert('我正在寫代碼'); 
}; 
var coder = new coder(); 
alert(coder.name); 
coder.coding(); 
 
注意:書上說:原型鏈有個缺點就是它所有屬性都共享,只要一個實例改變其他的都會跟著改變。 測試如下: 
復(fù)制代碼 代碼如下: 
var coder1 = new coder(); 
var coder2 = new coder(); 
alert(coder1.name); /*顯示“小王”*/ 
coder2.name = '老王'; 
alert(coder1.name); /*這個顯示“小王” 如果按書上說的應(yīng)該是顯示"老王"*/ 
alert(coder2.name); /*這個顯示“老王”*/ 
alert(coder1.name);如果按書上說的應(yīng)該是顯示"老王",但這里顯示的是“小王”,所以書上出錯了。 
 
方法四:混合方式。 
以上三種都有著各自的缺點,所以我們要加以改進。 
復(fù)制代碼 代碼如下: 
function coder(){ 
this.name = '小王'; 
this.job = '程序員'; 
} 
coder.prototype.coding = function(){ 
alert('我正在寫代碼'); 
}; 
 
方法五:動態(tài)原鏈。 
要解決前三種的缺點,還有一種方法。 
代碼 
復(fù)制代碼 代碼如下: 
function coder(){ 
this.name = '小王'; 
this.job = '程序員'; 
if (typeof(coder._init) == 'undefined'){ 
this.coding = function () 
{ 
alert('我正在寫代碼'); 
}; 
this._init = true; 
} 
} 
 
這個方法呢,當?shù)谝淮问褂脮r,由于_init沒初始化,就會執(zhí)行以下的代碼,實例化coding函數(shù)。以后就不會再執(zhí)行,這樣就只實例化函數(shù)一次。
                            
                            
                        
                        
                        
                            
                        
                        
                            
                            
                        
                        
                            
                        
                        
                        
                            相關(guān)文章
                            -  
 JavaScript 設(shè)計模式學習 Singleton
JavaScript設(shè)計模式學習 Singleton  2009-07-07  
 
-  
 JavaScript定義類或函數(shù)的幾種方式小結(jié)
js中不論是定義類或者函數(shù),很多朋友想將代碼寫的更專業(yè),更方便擴展等,那么就可以參考這篇文章了,最好是總結(jié),建議大家收藏下。 2011-01-01  
-  
 javascript中類的定義及其方式(《javascript高級程序設(shè)計》學習筆記)
javascript也是一種面向?qū)ο蟮木幊陶Z言。但是javascript中的類相關(guān)的東西(類的定義,原型鏈,繼承等)卻不是很好理解,特別是繼承。 2011-07-07  
 
-  
 JavaScript 使用簡略語法創(chuàng)建對象的代碼
JavaScript 使用簡略語法創(chuàng)建對象的代碼 ,需要的朋友可以參考下。 2010-01-01  
 
 
 
-  
 Javascript面向?qū)ο笤O(shè)計一 工廠模式
工廠模式抽象了創(chuàng)建具體對象的過程,但是在ECMAScript中無法創(chuàng)建類,所以就使用一種函數(shù)來封裝以特定接口創(chuàng)建對象的細節(jié) 2011-12-12  
                        
                        
                            
                        
                        
                        
                            最新評論
                            
                                
                            
                        
                    
但我們同樣可以使用javascript來實現(xiàn)繼承、多態(tài)。
javascript實現(xiàn)類,有多種方法。
方法一:構(gòu)造方法。
代碼
復(fù)制代碼 代碼如下:
function coder(){
this.name = '小王';
this.job = '程序員';
this.coding = function ()
{
alert('我正在寫代碼');
}
}
var coder=new coder();
alert(coder.name);
coder.coding();
方法二:工廠方法。
代碼
復(fù)制代碼 代碼如下:
function createCoderFactory(){
var obj=new Object();
obj.name = '小王';
obj.job = '程序員';
obj.coding = function (){
alert('我正在寫代碼');
};
return obj;
}
var coder = createCoderFactory();
alert(coder.name);
coder.coding();
但工廠方法和構(gòu)造方法都有著一個相同的缺點,就是每創(chuàng)建一個實例,都會實例化該類的每個函數(shù)。
方法三:原形鏈。
代碼
復(fù)制代碼 代碼如下:
function coder(){}
coder.prototype.name = '小王';
coder.prototype.job = '程序員';
coder.prototype.coding = function(){
alert('我正在寫代碼');
};
var coder = new coder();
alert(coder.name);
coder.coding();
注意:書上說:原型鏈有個缺點就是它所有屬性都共享,只要一個實例改變其他的都會跟著改變。 測試如下:
復(fù)制代碼 代碼如下:
var coder1 = new coder();
var coder2 = new coder();
alert(coder1.name); /*顯示“小王”*/
coder2.name = '老王';
alert(coder1.name); /*這個顯示“小王” 如果按書上說的應(yīng)該是顯示"老王"*/
alert(coder2.name); /*這個顯示“老王”*/
alert(coder1.name);如果按書上說的應(yīng)該是顯示"老王",但這里顯示的是“小王”,所以書上出錯了。
方法四:混合方式。
以上三種都有著各自的缺點,所以我們要加以改進。
復(fù)制代碼 代碼如下:
function coder(){
this.name = '小王';
this.job = '程序員';
}
coder.prototype.coding = function(){
alert('我正在寫代碼');
};
方法五:動態(tài)原鏈。
要解決前三種的缺點,還有一種方法。
代碼
復(fù)制代碼 代碼如下:
function coder(){
this.name = '小王';
this.job = '程序員';
if (typeof(coder._init) == 'undefined'){
this.coding = function ()
{
alert('我正在寫代碼');
};
this._init = true;
}
}
這個方法呢,當?shù)谝淮问褂脮r,由于_init沒初始化,就會執(zhí)行以下的代碼,實例化coding函數(shù)。以后就不會再執(zhí)行,這樣就只實例化函數(shù)一次。
相關(guān)文章
 JavaScript 設(shè)計模式學習 Singleton
JavaScript設(shè)計模式學習 Singleton2009-07-07
 JavaScript定義類或函數(shù)的幾種方式小結(jié)
js中不論是定義類或者函數(shù),很多朋友想將代碼寫的更專業(yè),更方便擴展等,那么就可以參考這篇文章了,最好是總結(jié),建議大家收藏下。2011-01-01
 javascript中類的定義及其方式(《javascript高級程序設(shè)計》學習筆記)
javascript也是一種面向?qū)ο蟮木幊陶Z言。但是javascript中的類相關(guān)的東西(類的定義,原型鏈,繼承等)卻不是很好理解,特別是繼承。2011-07-07
 JavaScript 使用簡略語法創(chuàng)建對象的代碼
JavaScript 使用簡略語法創(chuàng)建對象的代碼 ,需要的朋友可以參考下。2010-01-01
 Javascript面向?qū)ο笤O(shè)計一 工廠模式
工廠模式抽象了創(chuàng)建具體對象的過程,但是在ECMAScript中無法創(chuàng)建類,所以就使用一種函數(shù)來封裝以特定接口創(chuàng)建對象的細節(jié)2011-12-12

