javascript 接口模拟的三中实现方式
2018-09-28 17:41
351 查看
javascript 接口模拟的三中实现方式
- 三中方法:注释法,属性检查法,鸭式变型法
注释法:
//注释法 定义接口类 /* * interface interfaceClass{ * function eat(x,y) * function run(z) * } * * */ var Person = function(){ //接口的实现类interfaceClass }; Person.prototype.eat=function (x,y) { } Person.prototype.run=function (z) { }
属性检查法
//属性检查法 /* * interface action{ * function eat(x,y) * function run(z) * } * * */ var Person = function(){ //实现接口类action this.imlementsInterfaces=['action']; }; Person.prototype.eat=function (x,y) { console.log("实现了-"+x+y) } Person.prototype.run=function (z) { } function checkProperty(Obj) { for(var i=1;i<arguments.length;i++){ var interfaceName = arguments[i]; var isFound = false; for(var j=0;j<Obj.imlementsInterfaces.length;j++){ if(Obj.imlementsInterfaces[j]==interfaceName){ isFound = true; break; } } if(!isFound){ return false; } } return true; } function personName(){ var action = new Person(); if(checkProperty(action,'action')){ console.log("实现了接口"); action.eat("水","食物") }else{ console.log("没有实现接口"); } } personName();
鸭式变形法
//定义一个接口类 var Interface = function (name,methods) { if(arguments.length!=2){ throw new Error('必须输入两个参数,当前个数'+arguments.length); }; this.name = name; //接口名 this.methods = []; //函数名 for(var i=0;i<methods.length;i++){ if(typeof methods[i] !== 'string'){ throw new Error('方法名参数必须为string'); }else{ this.methods.push(methods[i]); } } }; //定义静态方法,检验实现接口和实现类 参数object为实现类对象 Interface.ensureImplements = function (object) { if(arguments.length<2){ throw new Error('必须输入两个参数,当前个数' + arguments.length); return; }; for(var i =1;i<arguments.length;i++){ var interface = arguments[i]; if(interface.constructor != Interface){ throw new Error("接口没有实现"); }; for(var j=0;j<interface.methods.length;j++){ var method = interface.methods[j]; if(!object[method] || typeof object[method]!=='function'){ throw new Error("接口名:"+interface.name+"方法名:"+method+"没找到"); } } } }; //定义接口 var action = new Interface('action',['eat','run']); var work = new Interface('work',['learn']) //定义实现类 function actionFun() { //实现接口的所有方法 this.eat = function () { console.log("吃了"); }; this.run = function () { console.log("跑了"); } this.learn = function () { console.log("学了"); } Interface.ensureImplements(this,action,work);//检测是否实现接口方法 } var p = new actionFun(); p.eat(); p.learn();阅读更多
相关文章推荐
- PHP以接口方式实现多重继承(完全模拟)--学习笔记
- javascript 模拟java 实现继承的5种方式
- JavaScript建立接口的方式(二)之属性检测接口实现方式
- javascript模拟实现java接口
- JavaScript接口的实现三种方式(推荐)
- JavaScript模拟实现封装的三种方式及写法区别
- [原创]Javascript模拟“类”的综合实现方式以及部分细节【截至ES6】
- javascript里模拟sleep(两种实现方式)
- 通过Javascript调用微软认知服务情感检测接口的两种实现方式
- JavaScript建立接口的方式(一)之属性检测接口实现方式
- 转 javascript实现接口
- GIS.arcgis for javascript简单接口调用实现地图展现
- JavaScript模拟实现自由落体效果
- JavaScript实现的可变动态数字键盘控件三种方式
- JavaScript中模拟实现Java的集合类Map的常用方
- Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口
- javascript实现二级下拉框(简单的方式)
- JavaScript模拟oop语言实现类的创建
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式