javascript接口实现
2015-10-03 09:41
507 查看
/** * Created by lenovo on 2015/10/2. */ //1注释描述 /* * interface inter(){ * function method1(); * function method2(); * function method3(); * } * * */ //implefunc implement inter var implefunc =function(){}; implefunc.prototype.method1=function(){}; implefunc.prototype.method1=function(){}; implefunc.prototype.method1=function(){}; /* * 2属性检测 *并不能检测其中的方法,只能检测接口 * interface inter1(){ * function method1(); * function method2(); * function method3(); * } * * interface inter2(){ * function method4(); * } * * */ //implefunc implement inter1,inter2 var implefunc=function(){ this.implementInterface=['inter1','inter2']; }; implefunc.prototype.method1=function(){}; implefunc.prototype.method2=function(){}; implefunc.prototype.method3=function(){}; implefunc.prototype.method4=function(){}; function checkImpleFunc(instance){ if(!IsImplements(instance,'inter1','inter2')){ throw new Error(); } } function IsImplements(object){ for(var i=1;i<arguments.length;i++){ var interfaceName=arguments[i]; var interfaceFound=false; for(var j=0;j<implementInterface.length;j++){ if(object.implementInterface[j]==interfaceName) { interfaceFound = true; break } } if(!interfaceFound) return false; } return true; } /* * 3鸭式辨形法 * * 可以完整的检测其中的方法 * */ var Interface=function(){ if(arguments.length!=2){ return new Error("the length of arguments is wrong"); } this.name=arguments[0]; this.methods=[]; for(var i= 0,len=arguments[1].length;i<len;i++){ if(typeof arguments[1][i]!=string){ throw new Error('the argument is wrong'); } this.methods.push(arguments[1][i]); } } var CompositeInterface=new Interface('compositeInterface','add'); var FormItemInterface=new Interface('FormItemInterface','sub'); var ImplementInter=function(){}; ImplementInter.prototype.add=function(){}; ImplementInter.prototype.sub=function(){}; Interface.ensureImplements=function(object) { if (arguments.length < 2) { throw new Error('the argument is less than 2'); } for (var i = 1; i < arguments.length; i++) { var instanceInterface = arguments[i]; if (instanceInterface.constructor != Interface) throw new Error('the arguments is not interface'); for (var j = 0; j < instanceInterface.methods.length; j++) { var methodName = instanceInterface.methods[j]; if (!object[methodName] || typeof object[methodName] !== 'function') throw new Error('the method is not found'); } } } var c1=new ImplementInter(); Interface.ensureImplements(c1,CompositeInterface,FormItemInterface);
相关文章推荐
- 关于PHP处理JAVA过来的接口和PHP返回给Javascript的JSON字符串
- JS学习笔记
- JSP之Cookie的实现
- JSP之Cookie的实现
- JSON的学习与使用
- javascript中argument1 === void 0的意思
- JS获取浏览器的高度和宽度
- JS操作Cookies的小例子
- 使用ExtJs实现文件下载
- JavaScript权威指南学习之第6章 对象
- JavaScript设计模式——工厂模式
- Atitit.列表页and查询条件的最佳实践(1)------设定搜索条件and提交查询and返回json数据
- 常规功能和模块自定义系统 (cfcmms)—011选择菜单后的执行过程
- 浅谈javascript的五种基本数据类型
- 添加附件、删除附件
- 所有jsp页面报错
- 动态创建表格、删除单行、单列
- javascript把地址栏中的中文取出不含乱码的方法
- 2015-09-28 Javascript
- [LeetCode][JavaScript]Find the Duplicate Number