代碼如下:
/**
* 創建接口對象
* @param name 接口名
* @param methods 接口方法
*/
var
Interface =
function
(name,methods){
if
(arguments.length != 2){
throw
new
Error(
'必須輸入兩個參數,當前個數'
+arguments.length);
}
this
.name=name;
this
.methods=[];
for
(
var
i=0, len=methods.length; i<len; i++){
if
(
typeof
methods[i] !==
'string'
){
throw
new
Error(
'方法名參數必須為string'
);
}
this
.methods.push(methods[i]);
}
};
/**
* 接口實現
* @param object1 實現接口對象
* @param object2 對應接口
* @return 實現錯誤拋出異常
*/
Interface.ensureImplements =
function
(object){
if
(arguments.length < 2){
throw
new
Error(
'必須輸入兩個參數,當前個數'
+ arguments.length);
}
for
(
var
i=1, len=arguments.length; i < len; i++){
var
interface = arguments[i];
if
(interface.constructor != Interface){
throw
new
Error(
"請實現接口"
);
}
for
(
var
j = 0, methodsLen = interface.methods.length; j < methodsLen; j++){
var
method = interface.methods[j];
if
(!object[method] ||
typeof
object[method] !==
'function'
){
throw
new
Error(
"接口名:"
+interface.name+
"方法名:"
+method+
"沒找到"
);
}
};
}
}
var
DynamicMap =
new
Interface(
'DynamicMap'
,[
'centerOnPoint'
,
'zoom'
,
'draw'
]);
/**
* 執行方法
* @param 函數方法
* @return 執行結果
*/
function
displayRoute(mapInstance){
Interface.ensureImplements(mapInstance,DynamicMap);
//實現接口
/**
* 調用
*/
mapInstance.centerOnPoint(12,34);
mapInstance.zoom(5);
mapInstance.draw();
}
/**
* 函數方法
* @type 實現接口方法
*/
var
a={
centerOnPoint:
function
(x,y){
console.log(x*y);
},
zoom:
function
(x){
console.log(x);
},
draw:
function
(){
console.log(
"x*y"
);
}
}
displayRoute(a);