小議javascript 設(shè)計模式 推薦
2024-05-06 14:13:12
供稿:網(wǎng)友
 
記得早前就說過要和大家分享“javascript設(shè)計模式”,遲遲沒寫不是因為我懶,最近確實太忙,忙工作,忙旅游(啊哦?),好不容易這幾天空閑了,接下來是兌現(xiàn)之前空口白話的時間了。 
在討論設(shè)計模式之前,請確認(rèn)您已經(jīng)有一定的腳本編程基礎(chǔ),如果不甚了解,建議可以先查閱本人很久之前寫的這篇《淺談javascript面向?qū)ο缶幊獭氛埧聪乱黄恼隆?
講到設(shè)計模式,不得不先重點著墨于“接口設(shè)計”,因為接口設(shè)計在設(shè)計模式中的意義太大了,大于模式本身。直觀起見,先介紹一下接口定義的形式: 
 代碼如下: 
var interface = new Interface("interface",[["getName",1],["getAge",1]]); 
 
可以看出接口函數(shù)必須包含兩個參數(shù),接口方法定義在一個二維數(shù)組中。上例中定義了兩個接口方法:getName,getAge,這兩個方法都帶一個參數(shù),下面我們詳細(xì)看一下Interface函數(shù)的實現(xiàn)代碼,從而加深大家對接口的理解。 
 代碼如下: 
function Interface(name,methods){ 
if(arguments.length !=2){ 
console.log("參數(shù)必須為二個"); 
} 
this.name = name; 
this.methods = []; 
if(methods.length<1){ 
console.log("第二個參數(shù)不能為空數(shù)組"); 
} 
for(var i=0;len=methods.length,i<len;i++){ 
if(typeof methods[i][0] !== 'string'){ 
console.log("第一個參數(shù)數(shù)據(jù)類型必須為字符串"); 
} 
if(methods[i][1] && typeof methods[i][1] !== 'number'){ 
console.log("第二個參數(shù)數(shù)據(jù)類型必須為整數(shù)型"); 
} 
if(methods[i].length == 1){ 
methods[i][1] = 0; 
} 
this.methods.push(methods[i]); 
} 
} 
 
從代碼中不難看出,接口函數(shù)的定義規(guī)則:[1]Interface函數(shù)只能包含兩個參數(shù),第一個參數(shù)為接口名稱,第二個參數(shù)是一個二維數(shù)組[2]第二個參數(shù)不允許為空數(shù)組[3]methods參數(shù)中的第一個參數(shù)必須為字符串類型,用以定義方法名,第二個參數(shù)必須為整數(shù)類型,用以定義方法的參數(shù)個數(shù)[4]當(dāng)methods中方法的參數(shù)個數(shù)為0時,可以省略不寫。 
接下來要建一個類,讓該類繼承前面定義的interface接口,那該怎么做呢,別急,我們需要新增一個方法,見如下代碼: 
 代碼如下: 
var ioldfish = function(name,age){ 
this.name = name; 
this.age = age; 
Interface.regImplement(this,interface); 
} 
ioldfish.prototype.getName = function(){ 
alert(this.name); 
}; 
ioldfish.prototype.getAge = function(){ 
alert(this.age); 
}; 
var fishwl = new ioldfish("老魚",27); 
fishwl.getName(); 
 
Interface.regImplement就是我們要新增的方法,作用就是讓ioldfish類按照接口interface的規(guī)范編碼,否則將會在firebug的控制臺拋出異常。 
看看這個方法的具體實現(xiàn)代碼: 
 代碼如下: 
Interface.regImplement = function(object){ 
if(arguments.length<2){ 
console.log("接口繼承參數(shù)不能少于二個");