在javascript中,介面是指對協定進行定義的參考類型,介面其實就是告訴我們一個類別實作了哪些方法,從而幫助其使用這個類別;介面可以讓程式碼變得更穩定。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
JavaScript中沒有內建的建立或實作介面的方法。它也沒有內建的方法來判斷該一個物件是否實作了與另一個物件相同的一套方法。這使物件很難互換使用。但是JavaScript很靈活,我們可以用別的方式去實現。
介面其實就是定義了物件內應該有哪些方法。他不用去考慮這些方法是怎麼去實現的,而是定義該物件有這些方法。
介面是指對協定進行定義的參考類型。其他類型實作接口,以確保它們支援某些操作。介面指定必須由類別提供的成員或實作它的其他介面。與類別相似,介面可以包含方法、屬性、索引器和事件作為成員。
介面其實就是告訴我們一個類別實作了哪些方法。從而幫助其使用這個類別。介面可以讓我們的程式碼變得更穩定,如果我們為介面添加了一個方法。而某個實作它的類別沒有相應的加入這個方法,那肯定會拋出一個錯誤。
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() { //... } }
class CompositeForm { constructor() { this.implementsInterface = ['Composite', 'FormItem']; } } function addForm(formInstance) { if (!implements(formInstance, 'Composite', 'FormItem')) { throw new Error('对象没有实现接口方法'); } } 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());
// interface class Interface { constructor(name, method) { if (arguments.length != 2) { throw new Error('两个参数: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('参数小于两个'); } for (let i = 1; i < arguments.length; i++) { var instanceInterface = arguments[i]; if (instanceInterface.constructor !== Interface) { throw new Error('你要检查的参数不属于Interface接口') } for (let j in instanceInterface.method) { let methodName = instanceInterface.method[j]; if (!obj[methodName] || typeof obj[methodName] !== 'function') { throw new Error(`请实现接口的${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); }
class Interface { constructor() { this.mehods = ['add', 'save', 'remove', 'save']; } static ensureImplements(obj) { //... } }
class CompositeForm extends Interface{ constructor() { super().ensureImplements(this); } }
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 = '请实现接口' + methodName + '的方法'; throw new Error(err); } } } }
javascript進階教學】
以上是javascript中介面是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!