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);