面向?qū)ο蟮腏avascript之二(接口實現(xiàn)介紹)
2024-05-06 14:22:34
供稿:網(wǎng)友
就足以說明接口在面向?qū)ο蟮念I(lǐng)域中有多重要。但JS卻不像其他面向?qū)ο蟮母呒壵Z言(C#,Java,C++等)擁有內(nèi)建的接口機制,以確定一組對象和另一組對象包含相似的的特性。所幸的是JS擁有強大的靈活性(我在上文已談過),這使得模仿接口特性又變得非常簡單。那么到底是接口呢?
接口,為一些具有相似行為的類之間(可能為同一種類型,也可能為不同類型)提供統(tǒng)一的方法定義,使這些類之間能夠很好的實現(xiàn)通信。
那使用接口到底有哪些好處呢?簡單地說,可提高系統(tǒng)相似模塊的重用性,使得不同類的通信更加穩(wěn)固。一旦實現(xiàn)接口,則必須實現(xiàn)接口中所有的方法。對于大型的Web項目來說,使得多個復(fù)雜模塊的相似功能模塊,只需要提供接口便可以提供一個實現(xiàn),而彼此之間不受到影響。但我們必須明確,接口也不是萬能的,由于JS是弱類型語言,你并不能強制其他的團(tuán)隊成員嚴(yán)格遵循你所提供的接口,不過你可以使用代碼規(guī)范和輔助類來緩解這個問題。另外,對系統(tǒng)性能也會造成一定的影響,應(yīng)根據(jù)你的系統(tǒng)需求復(fù)雜度而定。由于沒有內(nèi)建的interface和implements關(guān)鍵字,下面我們來看看JS是如何模仿實現(xiàn)接口的。
1. 最簡單也是效果最差實現(xiàn)接口的方式是使用注釋。即在注釋中使用interface來說明接口的意圖。
代碼如下:
/*
interface Composite {
function add(child);
function remove(child);
function getChild(index);
}
interface FormItem {
funtion save();
}
*/
var CompositeForm = function(id, name, action) {
// implements Composite, FormItem
}
CompositeForm.prototype = {
// implements Composite interface
add: function(child) {
//...
},
remove: function(child) {
//...
},
getChild: function(index) {
//...
}
// implements FormItem interface
save: function() {
//...
}
}
這并沒有很好的模擬接口的功能和確保Composite類確實實現(xiàn)了方法的集合,也沒有拋出錯誤通知程序員問題所在,除了說明以外不起任何作用,所有的一致性都需要程序員自覺完成。但它容易實現(xiàn),不需要額外的類或函數(shù),不影響文檔的大小和執(zhí)行速度,注釋也能很輕易的剝離,在一定程度上提高了重用性,因為提供了類的說明可以跟其他實現(xiàn)相同接口的類進(jìn)行通信。
2. 用屬性檢查模擬接口。類顯示聲明了要實現(xiàn)的接口,通過屬性檢查是否實現(xiàn)了相應(yīng)的接口。
代碼如下:
/*
interface Composite {
function add(child);
function remove(child);
function getChild(index);
}
interface FormItem {
funtion save();
}
*/
var CompositeForm = function(id, name, action) {
this.implementsInterfaces = ["Composite", "FormItem"];
//...
}
function checkInterfaces(formInstance) {