鸭式辨型法实现的核心:一个类实现接口的主要目的:把接口里的方法都实现(检测方法)

javascript没有接口的概念,实现接口主要有3种,注解描述,属性检测,鸭式辨型,其中鸭式辨型最为常用

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK"/><title>javascript interface</title><script type=text/javascript charset=GBK>// 鸭式辨型法实现的核心:一个类实现接口的主要目的:把接口里的方法都实现(检测方法)// 一: 接口类 Class Interface ==>实例化N多个接口/*** 接口类需要2个参数* 参数1: 接口的名字 (string)* 参数2: 接受方法名称的集合(数组) (array)*/var Interface = function(name , methods){//判断接口的参数个数if(arguments.length != 2){throw new Error('argument.length must be 2');}this.name = name;this.methods = [];//定义一个内置的空数组对象 等待接受methods里的元素(方法名字)for(var i = 0, len = methods.length ;i < len; i++ ){if(typeof methods[i] != 'string'){throw new Error('methods.type must be string');}this.methods.push(methods[i]);}}// 二: 准备工作:// 1 实例化接口对象var CompositeInterface = new Interface('CompositeInterface' , ['add' , 'remove']);var FormItemInterface  = new Interface('FormItemInterface' , ['update','select']);//  CompositeImpl implements CompositeInterface , FormItemInterface// 2 具体的实现类 var CompositeImpl = function(){} // 3 实现接口的方法implements methods       CompositeImpl.prototype.add = function(){alert('add...');}CompositeImpl.prototype.update = function(){alert('update...');}CompositeImpl.prototype.select = function(){alert('select...');}CompositeImpl.prototype.remove = function(){alert('remove...');}// 三:检验接口里的方法// 如果检验通过 不做任何操作 不通过:浏览器抛出error// 这个方法的目的 就是检测方法的Interface.ensureImplements = function(object){// 如果检测方法接受的参数小于2个 参数传递失败!if(arguments.length < 2){throw new Error('Interface.ensureImplements method constructor arguments must be  >= 2!');}// 获得接口实例对象 for(var i = 1; i < arguments.length;i++){var instanceInterface = arguments[i];if(instanceInterface.constructor != Interface){throw new Error('the arguments constructor not be Interface Class');}        // 循环接口实例对象里面的每一个方法for(var j=0;j < instanceInterface.methods.length;j++){var methodName = instanceInterface.methods[j];// object[key] 就是方法if(!object[methodName] || typeof object[methodName] != 'function'){throw new Error("the method name '" + methodName + "' is not found !");}}            }}var c1 = new CompositeImpl();Interface.ensureImplements(c1,CompositeInterface,FormItemInterface);c1.add();</script></head><body></body>
</html>

javascript接口鸭式辨型法实现相关推荐

  1. OOP 中的 方法调用、接口、鸭式辩型、访问者模式

    2019独角兽企业重金招聘Python工程师标准>>> 方法调用的四种方式 直接调用:通过类或者实例直接调用其方法. 接口调用或者转型调用:通过将实例回调给一个接口对象,或者转型为一 ...

  2. 异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案

    异常数据(outlier data)处理基于分位数法(箱图法.箱型法)替换及删除方案 简单统计法: 这个原则有个条件:数据需要服从正态分布. 在3倍标准差原则下,异常值如超过3倍标准差,那么可以将其视 ...

  3. JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码)

    JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码) fibonacciNthClosedForm.js完整源代码 fibonacci ...

  4. matlab实现单纯型法解线性规划_【考研运筹学讲解】线性规划(一)

    哈喽,大家好,初次见面,我是"小黑哥交通考研" 我们致力于为大家提供最新最齐全的交通考研信息,欢迎大家关注~ 关注小黑,就地起飞! 我们还邀请了考研成功的学长学姐为大家分享考研心得 ...

  5. 单纯型法Ⅱ(bzoj 1061: [Noi2008]志愿者招募)

    线性规划单纯型法:http://blog.csdn.net/jaihk662/article/details/78050666 标准型:m个约束,n个变量,构成m*n的矩阵 C是一个n的向量,B是一个 ...

  6. 小程序源码:独家修复登录接口社区论坛-多玩法安装简单

    这是一款社区论坛小程序源码 内涵强大的功能 支持多种多样的发帖模式 比如发图文,发语音,发涂鸦,发视频等 ​ 编辑 另外还拥有礼物功能,可以对发帖人打赏,礼物等都可以自定义 另外还有商城功能 发帖还可 ...

  7. 容联云通讯php短信接口,开发中使用 【容联 云通信】获取短信验证码的 Javascript 接口...

    开发中使用 [容联 云通信]获取短信验证码的 Javascript 接口 在平台应用列表添加应用. 在测试号码中绑定测试手机号码,只有这个号码能接收验证短信. 在项目中绑定配置:将控制台首页的开发者主 ...

  8. dvi转vga接口图及相关接法

    dvi转vga接口图及相关接法 http://www.360doc.com/content/10/0418/16/1227601_23652507.shtml 转载于:https://blog.51c ...

  9. java页面展示流式图片,javascript瀑布流式图片懒加载实例解析与优化

    之前写过一版图片"懒加载"的文章,刚好周末在整理文件的时候,大概又看了一遍之前写的代码发现有很多可以优化的地方. 这篇文章主要就是结合上篇<javascript瀑布流式图片懒 ...

  10. PHP链接ctp接口,CTP接口穿透式监管升级后对外接入地址变更,适用SIMNOW 模拟账户...

    关于SIMNOW老账户穿透式监管接入授权码和APPID 下周SIMNOW升级到看穿式后,老账户统一APPID为simnow_client_test,认证码为0000000000000000(16个0) ...

最新文章

  1. 干货|一文全解深度学习中的卷积
  2. WebGIS概述:WebGIS基础(1)
  3. Versions maven plugin 修改版本
  4. spark 笔记 1: 如何着手
  5. DELPHI之备忘(二)
  6. Linux下 查找大文件
  7. MySQL☞insert value与values
  8. 95-872-058-源码-CEP-CEP规则匹配
  9. 零基础学python pdf-笔记《零基础入门学习Python(第2版)》PDF+课件+代码分析
  10. python装饰器两层和三层_2020 python学习第十六天————三层装饰器与迭代器
  11. 【国际IT专场】搞编程后悔没早知道的Linux命令
  12. 关于微信和微信小程序
  13. android软件音量控制
  14. pe卸载linux系统软件,Windows和Linux双系统下完美卸载linux
  15. ListView源码(推荐)
  16. 前端学习2-JavaScript
  17. win10搭建网络代理,供Linux使用
  18. Element-ui input 输入框限制只能输入数字的问题
  19. 红米note+开机+android,红米note清除数据进入方法 红米note三清教程
  20. 卷不动了?300 秒快速了解 Java 9 - 16 新特性,助你脱离内卷

热门文章

  1. php 私有云盘,私有云盘搭建
  2. KVM虚拟化平台的基础知识及搭建部署!
  3. phusion passenger standalone
  4. 【数据可视化工具DataEase】安装时提示 “Pool overlaps with other one on this address space“
  5. html打字机特效,[JS插件]酷炫的打字机效果: Typed.js
  6. 计算机上机日志如何查找,如何查看金蝶KIS记账王上机日志
  7. php使用二进制判断图片(或文件)真实类型(可判断远程图片)
  8. Cinder调度之Filter介绍
  9. 腾讯低代码平台正式开源:可拖拽生成手机、PC等项目-接私活福利啊
  10. 网易云--荣格心理学测验