javascript-接口

什么是接口

接口是面向对象JavaScript程序员的工具箱中最有用的工具之一。在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概念的重要性可见一斑。但问题在于,在JavaScript的世界中,没有内置的创建或实现接口的方法,也没有可以判断一个对象是否实现了与另一个对象相同的一套方法,这使得对象之间很难互换使用,好在JavaScript拥有出色的灵活性,这使得模拟传统面向对象的接口,添加这些特性并非难事。接口提供了一种用以说明一个对象应该具有哪些方法的手段,尽管它可以表明这些方法的含义,但是却不包含具体实现。有了这个工具,就能按对象提供的特性对它们进行分组。例如,假如A和B以及接口I,即便A对象和B对象有极大的差异,只要他们都实现了I接口,那么在A.I(B)方法中就可以互换使用A和B,如B.I(A)。还可以使用接口开发不同的类的共同性。如果把原本要求以一个特定的类为参数的函数改为要求以一个特定的接口为参数的函数,那么所有实现了该接口的对象都可以作为参数传递给它,这样一来,彼此不相关的对象也可以被相同地对待。

代码实现

interface 类 实现的接口

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('方法名要传入字符串');
        }
        this.methods.push(methods[i]);
      }
    }

    Interface.ensureImplements = function(object){
      if(arguments.length < 2){
        throw new Error('参数小于两个');
      }

      for(var i = 1,len = arguments.length;i<len;i++){
        var interface = arguments[i];
        if(arguments[i].constructor != Interface){
          throw new Error('请实现接口');
        }
        for(var j = 0,metLen = arguments[i].length;j<metLen;j++){
          var methods = interface.methods[j];
          if(!object[methods] || typeof object[methods] != 'function'){
            throw new Error('请实现接口');
          }
        }
      }
    }

   var DynamicMap = new Interface('DynamicMap',['centerOnPoint','zoom','draw']);

        function displayRoute(mapInstance){
            Interface.ensureImplements(mapInstance,DynamicMap);

            mapInstance.centerOnPoint(12,34);
      mapInstance.zoom(5);
      mapInstance.draw();

        }



        var a={
                centerOnPoint:function(x,y){
                console.log(x*y);
            },
                zoom:function(x){
                console.log(x);
            },
                draw:function(){
                console.log("x*y");
            }
        }

        displayRoute(a);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值