javascript接口实现

/**
 * Created by lenovo on 2015/10/2.
 */
//1注释描述
/*
* interface inter(){
*   function method1();
*   function method2();
*   function method3();
* }
*
* */
//implefunc implement  inter
var implefunc =function(){};
implefunc.prototype.method1=function(){};
implefunc.prototype.method1=function(){};
implefunc.prototype.method1=function(){};
/*
* 2属性检测
*并不能检测其中的方法,只能检测接口
* interface inter1(){
*   function method1();
*   function method2();
*   function method3();
* }
*
* interface inter2(){
*   function method4();
* }
*
* */
//implefunc implement inter1,inter2
var implefunc=function(){
    this.implementInterface=['inter1','inter2'];
};
implefunc.prototype.method1=function(){};
implefunc.prototype.method2=function(){};
implefunc.prototype.method3=function(){};
implefunc.prototype.method4=function(){};

function checkImpleFunc(instance){
    if(!IsImplements(instance,'inter1','inter2')){
        throw new Error();
    }
}
function IsImplements(object){
    for(var i=1;i<arguments.length;i++){
        var interfaceName=arguments[i];
        var interfaceFound=false;
        for(var j=0;j<implementInterface.length;j++){
            if(object.implementInterface[j]==interfaceName) {
                interfaceFound = true;
                break
            }
        }
        if(!interfaceFound)
        return false;
    }
    return true;
}

/*
* 3鸭式辨形法
*
* 可以完整的检测其中的方法
* */
var Interface=function(){
    if(arguments.length!=2){
        return new Error("the length of arguments is wrong");
    }
    this.name=arguments[0];
    this.methods=[];
    for(var i= 0,len=arguments[1].length;i<len;i++){
        if(typeof arguments[1][i]!=string){
            throw new Error('the argument is wrong');
        }
        this.methods.push(arguments[1][i]);
    }
}
var CompositeInterface=new Interface('compositeInterface','add');
var FormItemInterface=new Interface('FormItemInterface','sub');
var ImplementInter=function(){};
ImplementInter.prototype.add=function(){};
ImplementInter.prototype.sub=function(){};






Interface.ensureImplements=function(object) {
    if (arguments.length < 2) {
        throw new Error('the argument is less than 2');
    }
    for (var i = 1; i < arguments.length; i++) {
        var instanceInterface = arguments[i];
        if (instanceInterface.constructor != Interface)
            throw new Error('the arguments is not interface');
        for (var j = 0; j < instanceInterface.methods.length; j++) {
            var methodName = instanceInterface.methods[j];
            if (!object[methodName] || typeof  object[methodName] !== 'function')
                throw  new Error('the method is not found');
        }
    }
}
var c1=new ImplementInter();
Interface.ensureImplements(c1,CompositeInterface,FormItemInterface);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值