鸭式辨型模仿接口

鸭式辨型:"像鸭子一样走路并且嘎嘎叫的就叫鸭子。"通过制定规则来判定对象是否实现这个接口。

创建接口类,主要用来保存信息到实例类中:    

     var Interface = function (name, methods) {
          this.name = name;
          this.method = methods;
      }

      接口就是自定义规则。我定义了会游泳,会嘎嘎叫,有两条腿的就是鸭子:      

    var Duck = new Interface('Duck', ['swim', 'cry', 'foots']);

     创建检测方法。它用来检测对象中有没有实现Duck接口中所有的方法,如果有就认为这个对象实现了Duck接口;否则就认为没有实现。
   
    Interface.ensureImplements = function (obj, interface) {
         var noMethods = [];    
         for(var i = 0, len = interface.method.length; i < len; i++) {
              //遍历对象的方法,将不存在的方法保存至noMethods中;
             if(!interface.method[i] || typeof obj[interface.method[i]] !== 'function') {             
                    noMethods.push(interface.method[i]);
} } if(noMethods.length){
throw new Error(obj.name+'实例对象没有实现'+interface.name+'接口'); }else{ console.log(obj.name+'实例对象已经实现'+interface.name+'接口'); } };

   创建被检测的对象_newDuck,这个对象继承了三个方法。   
   var duck = function (){ this.name = 'duck'; }   
   duck.prototype = {    
           'swim': function (){},
           'cry': function (){},
           'foots': function (){},
   }
   var _newDuck = new duck();
   最后检测,如果_newDuck中有Duck接口定义的所有方法,那么我们就可以认为_newDuck对象实现了Duck接口。我们前面定义了鸭子是会游泳,会嘎嘎叫,还有两条腿,所有符合这规则定义的就可以称为鸭子。正如_newDuck拥有了Duck接口所有定义的方法。   
   Interface.ensureImplements(_newDuck, Duck); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值