1 /** 2 * 创建接口对象 3 * @param name 接口名 4 * @param methods 接口方法 5 */ 6 var Interface = function(name,methods){ 7 if(arguments.length != 2){ 8 throw new Error('必须输入两个参数,当前个数'+arguments.length); 9 } 10 11 this.name=name; 12 this.methods=[]; 13 for(var i=0, len=methods.length; i<len; i++){ 14 if(typeof methods[i] !== 'string'){ 15 throw new Error('方法名参数必须为string'); 16 } 17 this.methods.push(methods[i]); 18 } 19 }; 20 /** 21 * 接口实现 22 * @param object1 实现接口对象 23 * @param object2 对应接口 24 * @return 实现错误抛出异常 25 */ 26 Interface.ensureImplements = function(object){ 27 if(arguments.length < 2){ 28 throw new Error('必须输入两个参数,当前个数' + arguments.length); 29 } 30 for(var i=1, len=arguments.length; i < len; i++){ 31 var interface = arguments[i]; 32 if(interface.constructor != Interface){ 33 throw new Error("请实现接口"); 34 } 35 36 for (var j = 0, methodsLen = interface.methods.length; j < methodsLen; j++){ 37 var method = interface.methods[j]; 38 if(!object[method] || typeof object[method] !== 'function'){ 39 throw new Error("接口名:"+interface.name+"方法名:"+method+"没找到"); 40 } 41 }; 42 } 43 } 44 45 46 var DynamicMap = new Interface('DynamicMap',['centerOnPoint','zoom','draw']); 47 48 /** 49 * 执行方法 50 * @param 函数方法 51 * @return 执行结果 52 */ 53 function displayRoute(mapInstance){ 54 Interface.ensureImplements(mapInstance,DynamicMap);//实现接口 55 56 /** 57 * 调用 58 */ 59 mapInstance.centerOnPoint(12,34); 60 mapInstance.zoom(5); 61 mapInstance.draw(); 62 } 63 /** 64 * 函数方法 65 * @type 实现接口方法 66 */ 67 var a={ 68 centerOnPoint:function(x,y){ 69 console.log(x*y); 70 }, 71 zoom:function(x){ 72 console.log(x); 73 }, 74 draw:function(){ 75 console.log("x*y"); 76 } 77 } 78 displayRoute(a);
转载于:https://www.cnblogs.com/sususu/archive/2012/07/04/2575816.html