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(){};
					}
				}
			}
			
		};