這篇文章主要講解了“javascript中接口的作用是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“javascript中接口的作用是什么”吧!
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網營銷、網站重做改版、岳陽網站定制設計、自適應品牌網站建設、H5頁面制作、商城網站制作、集團公司官網建設、外貿網站建設、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為岳陽等各大城市提供網站開發(fā)制作服務。
在javascript中,接口是指對協(xié)定進行定義的引用類型,接口其實就是告訴我們一個類實現(xiàn)了哪些方法,從而幫助其使用這個類;接口可以讓代碼變得更穩(wěn)定。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
JavaScript中沒有內置的創(chuàng)建或實現(xiàn)接口的方法。它也沒有內置的方法用于判斷該一個對象是否實現(xiàn)了與另一個對象相同的一套方法。這使對象很難互換使用。但是JavaScript很靈活,我們可以通過別的方式去實現(xiàn)。
接口其實就是定義了對象內應該有哪些方法。他不用去考慮這些方法是怎么去實現(xiàn)的,而是定義該對象有這些方法。
接口是指對協(xié)定進行定義的引用類型。其他類型實現(xiàn)接口,以保證它們支持某些操作。接口指定必須由類提供的成員或實現(xiàn)它的其他接口。與類相似,接口可以包含方法、屬性、索引器和事件作為成員。
接口其實就是告訴我們一個類實現(xiàn)了哪些方法。從而幫助其使用這個類。接口可以讓我們的代碼變得更穩(wěn)定,如果我們給接口添加了一個方法。而某個實現(xiàn)它的類沒有相應的添加這個方法,那肯定會拋出一個錯誤。
JavaScript模仿接口有三種方法:
注釋法
屬性檢查法
鴨式變型法
用注釋描述接口是最簡單的方法,但是效果是最差的。
/* interface Composite { function add(child); function remove(child); function getChild(index); } interface FormItem { function save(); } */ class CompositeForm { add(child) { //... } remove(child) { } getChild(index) { //... } save() { //... } }
這種模仿方法不是很好,它沒有檢查CompositeForm是否正確的實現(xiàn)了方法,完全是通過程序員們自覺去實現(xiàn)注釋中的接口。不過這種實現(xiàn)方式非常的簡單,但是它對測試和調試沒有任何幫助。
這個方法會更謹慎一點,但是接口也是注釋的形式寫出來,只是可以通過檢查一個屬性得知某個類自稱實現(xiàn)了什么接口。
class CompositeForm { constructor() { this.implementsInterface = ['Composite', 'FormItem']; } } function addForm(formInstance) { if (!implements(formInstance, 'Composite', 'FormItem')) { throw new Error('對象沒有實現(xiàn)接口方法'); } } function implements(obj) { // 這個方法查詢接口 for (let i = 1; i < arguments.length; i++) { let interfaceName = arguments[i]; let interfaceFound = false; for (let j = 1; j < obj.implementsInterface.length; j++) { if (obj.implementsInterface[j] == interfaceName) { interfaceFound = true; break; } } if (!interfaceFound) { return false; } return true; } } addForm(new CompositeForm());
這種方法的優(yōu)點是他對類所實現(xiàn)的接口提供了文檔說明,如果需要的接口不在我這個類宣稱支持的接口之列(也就是說不在我的this.implementsInterface里),你就會看到錯誤信息。
缺點也顯而易見,如果我的this.implementsInterface里宣稱的和我注釋里所定義的接口不一樣但檢查還是能通過的,就是調用addForm方法是不會爆破錯的
其實,類是否聲明自己支持哪些接口并不重要,只要具有這些接口中的方法就行。鴨式變型法把對象的方法集作為判斷它是不是某個實例的唯一標準。實現(xiàn)原理也非常的簡單:如果對象具有與接口定義的方法同名的方法,那么就可以認為他實現(xiàn)了這個接口。
// interface class Interface { constructor(name, method) { if (arguments.length != 2) { throw new Error('兩個參數(shù):name method'); } this.name = name; this.method = []; for (let i in method) { if (typeof method[i] != 'string') { throw new Error('method 必須是字符串'); } this.method.push(method[i]); } } //檢查接口方法 static ensureImplements(obj) { if (arguments.length < 2) { throw new Error('參數(shù)小于兩個'); } for (let i = 1; i < arguments.length; i++) { var instanceInterface = arguments[i]; if (instanceInterface.constructor !== Interface) { throw new Error('你要檢查的參數(shù)不屬于Interface接口') } for (let j in instanceInterface.method) { let methodName = instanceInterface.method[j]; if (!obj[methodName] || typeof obj[methodName] !== 'function') { throw new Error(`請實現(xiàn)接口的${methodName}方法`) } } } } } // 實例化接口對象 var Composite = new Interface('Composite', ['add', 'remove', 'getChild']); var FormItem = new Interface('FormItem', ['save']); // CompositeForm 類 class CompositeForm { //... add() {} remove() {} getChild() {} } let c1 = new CompositeForm(); Interface.ensureImplements(c1, Composite, FormItem); function addForm(formInterface) { ensureImplements(formInterface, Composite, FormItem); }
上面代碼中的CompositeForm類中我沒有實現(xiàn)save方法。運行這段代碼就會報錯。
但是鴨式變型法也是有缺點的,各個檢查方面都是強制實施的。
我用了類的繼承來模擬接口,具體實現(xiàn)請看代碼。
首先我們定義一個用作接口的類,屬性method代表接口的方法集
class Interface { constructor() { this.mehods = ['add', 'save', 'remove', 'save']; } static ensureImplements(obj) { //... } }
定義一個CompositeForm類繼承這個接口,并且在該類里面調用父類的ensureImplements方法檢測接口
class CompositeForm extends Interface{ constructor() { super().ensureImplements(this); } }
完善ensureImplements方法
class Interface { constructor() { this.mehods = ['add', 'save', 'remove', 'save']; } static ensureImplements(obj) { for (let i in this.mehods) { let methodName = this.mehods[i] if (!obj[methodName] || typeof obj[methodName] !== 'function') { let err = '請實現(xiàn)接口' + methodName + '的方法'; throw new Error(err); } } } }
感謝各位的閱讀,以上就是“javascript中接口的作用是什么”的內容了,經過本文的學習后,相信大家對javascript中接口的作用是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!
標題名稱:javascript中接口的作用是什么
文章URL:http://jinyejixie.com/article22/iicjjc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供云服務器、網站導航、動態(tài)網站、外貿建站、App開發(fā)、定制開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)