/** * 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);
javascript接口实现
最新推荐文章于 2023-02-03 15:37:57 发布