1、接口的定义:
/* * Interface构造器 * @param {String} name 接口名 * @param {Array} methods 接口的抽象方法 * @example var sAction = new Interface('sAction',["method1","method2","method3"]); */ var Interface = function(name,methods){ if(arguments.length !== 2){ throw new Error("Interface目前只支持两个参数,目前的参数个数:"+arguments.length); } this.name = name; this.methods = []; var i, len = methods.length; for(i=0;i<len;i++){ if(typeof methods[i] !== 'string'){ throw new Error("Interface中方法名不合法,应该为string类型"); } this.methods.push(methods[i]); } };
2、接口的实现:
/* * 接口的实现 * @param {function} ImplementsClass 待实现的类 * @param {Object} Interface1 被实现的Interface,Interface的实例 * @example var cAction = function(){}, aAction = new Interface('aAction',['getA','setA']); implemets(cAction,aAction); */ var implemets = function(ImplementsClass,Interface1,Interface2){ if(arguments.length < 2){ throw new Error("至少两个参数,而当前的参数个数:"+arguments.length); } if(typeof arguments[0] !== "function"){ throw new Error("实现类的类型必须是function类型"); } var i, len = arguments.length; for(i=1;i<len;i++){ var interfaceA = arguments[i]; if(interfaceA.constructor !== Interface){ throw new Error(interfaceA+"不是Interface的实例,不是接口"); } var j, methodLen = interfaceA.methods.length; for(j=0;j<methodLen;j++){ var method = interfaceA.methods[j]; if(!arguments[0].prototype[method]){ arguments[0].prototype[method] = function(){}; } } } };