实现接口,必须实现接口里的所有方法。

function Interface(name,fns){//声明一个接口类
            this.name = name;
            this.methods=[];
            for(var i=0;i<fns.length;i++){
                if(typeof fns[i] != 'string')
                    throw new Error("方法名必须是字符串,必须传字符串数组");
                this.methods.push(fns[i]);
            }
        }
        var face1 = new Interface('face1',['add','edit']);//创建接口对象,该接口声明了两个需要实现的方法add和edit
        var face2 = new Interface('face2',['del','save']);
        Interface.ensureImplements = function(obj){//定义检测是否实现接口的函数,可以传一个或多个接口对象
            if(arguments.length<2){
                throw new Error("至少要传两个参数");
            }
            for(var i=1;i<arguments.length;i++){
                if(arguments[i].constructor != Interface){
                throw new Error("这个不是接口对象,请传接口对象");
                }

for(var j=0;j<arguments[i].methods.length;j++){
                
                if(!(obj[arguments[i].methods[j]]) || typeof obj[arguments[i].methods[j]] != 'function'){
                    throw new Error("没实现接口里的所有方法");
                }
            }

}      
        }

function dd(){//声明一个类实现接口的所有方法
            this.name="yes";
            this.add=function(){

}
            this.del=function(){}
            this.edit=function(){}
            this.save=function(){}
        }

var kk = new dd();

Interface.ensureImplements(kk,face1,face2);//检测kk对象是否实现了face1和face2两个接口

通常,如果一个类的参数是另一个类的对象时,我们会用到接口技术。

function Demo(kk){

  Interface.ensureImplements(kk,face1,face2);

  this.formaction = kk;//将dd类的对象传给Demo类的formaction属性。

}

Demo.prototype.operation = function(){

  var sdata = this.formaction.save();

}

js中接口的声明与实现的更多相关文章

  1. js中变量的声明

    大家都知道js中变量的声明是要提前的,下面有4个样例: 1.if(!"t" in window){  var t = 1; }       alert(t);答案是undefine ...

  2. 简单说明一下JS中的函数声明存在的“先使用,后定义”

    首先看一段JS代码,其中使用了两种方式声明了两个函数,分别在不同的地方调用两个函数: <script> 'use strict'; // 输出hello函数 console.log(hel ...

  3. js 中的变量声明提前总结

    一.var 声明 ES6之前,js 中声明变量基本上用 var 关键字: 1.如果访问未声明的变量,会报错:ReferenceError 2.声明了未赋值,值为 undefined,跟前面的报错是两回 ...

  4. JS中的函数声明和函数表达式的区别,即function(){}和var function(){},以及变量提升、作用域和作用域链

    一.前言 Uncaught TypeError: ... is not a function function max(){}表示函数声明,可以放在代码的任何位置,也可以在任何地方成功调用: var ...

  5. [JavaScript]JS中的变量声明与有效域

    1.变量声明 var a = 1; //使用var声明变量 b = 1; //不使用var 第一种情况,在当前域中声明一个名为a的变量,如果实在方法内则为局部变量,若在最外层声明则a为全局变量. 第二 ...

  6. JS中的函数声明错误

      这个问题是JS的函数声明形参部分不带var. ( 额,基础不扎实.)

  7. Js中有关变量声明和函数声明提升的问题

    在ECMAScript5中没有块级作用域一说,只有函数作用域和全局作用域,在其中声明的变量和函数和其他语言的展现形式不同,在某些情况下不一定需要先定义后使用,函数和变量的使用可以在其声明之前,这到底是 ...

  8. js中的函数声明置顶

    函数声明置顶是指 js引擎在读取变量与声明式函数时,会优先读取,例如如下 var a = 1: function a(){}; console.log(a); //这里得到的为1,而不是该functi ...

  9. js中的函数声明和函数表达式的区别

    目录 一.声明与表达式的格式 1.1 声明式的格式: 1.2 表达式的格式: 二.区别 2.1 函数表达式可以直接在后面加括号执行,而函数声明不可以. 2.2 函数表达式可以被提前解析出来 2.3 命 ...

随机推荐

  1. XML的介绍

    XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,类似于HTML.它被设计的宗旨是传输数据,而非显示数据.   XML标签没有被预定义,需要开发者自定 ...

  2. 【使用 DOM】使用事件

    1. 使用简单事件处理器 可以用几种不同的方式处理事件.最直接的方式是用事件属性创建一个简单事件处理器(simple event handler).元素为它们支持的每一种事件都定义了一个事件属性.举个 ...

  3. C# 线程同步

    Mutex 类 使用Mutex类来同步两个单独的程序.Mutex是一种原始的同步方式,其只对一个线程授予对共享资源的独占访问. const string NutexName = "C&quo ...

  4. mac java 环境设置

    MAC下JDK1.6下载路径 http://support.apple.com/kb/DL1572 Mac OS的java版本问题和Eclipse中无法找到jdk源代码的问题解决办法 下载包含源代码j ...

  5. C语言预处理命令之条件编译

    在C语言中,预处理指令是以#号开头的代码行.#号必须是该行除了任何空白字符外的第一个字符.#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符.整行语句构成了一条预处理指令,该指令将在编译器 ...

  6. bash shell命令(2)

    在上篇<bash shell命令(1)>中,介绍了几种简单的linux shell命令,今天继续介绍bash shell命令 本文地址:http://www.cnblogs.com/arc ...

  7. Swift的7大误区

    Swift正在完成一个惊人的壮举,它正在改变我们在苹果设备上编程的方式,引入了很多现代范例,例如:函数式编程和相比于OC这种纯面向对象语言更丰富的类型检查. Swift语言希望通过采用安全的编程模式去 ...

  8. 手动删除webapps下项目,导致Document base %TOMCAT_HOME%\webapps\XXX does not exist or is not a readable directory

    删除 %TOMCAT_HOME%\conf\XXX.xml , 再次eclipse中重新启动tomcat,错误就会消失.

  9. Python 常用函数time.strftime()简介

    time.strftime()可以用来获得当前时间,可以将时间格式化为字符串等等   格式命令列在下面:(区分大小写) %a 星期几的简写%A 星期几的全称%b 月分的简写%B 月份的全称%c 标准的 ...

  10. log4net资料收集

    Log4net 日志使用介绍 http://www.cnblogs.com/jys509/p/4699813.html log4net Tutorial http://www.codeproject. ...