javascript鸭式辩型法实现接口
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <script charset="UTF-8" type="text/javascript">
- /**
- * 创建接口类
- */
- function Interface(name,methods){
- if(arguments.length<2){
- throw new Error('需要传递两个参数');
- }
- this.name = name;
- this.methods = [];
- for(var i = 1;i<methods.length;i++){
- var methodName = methods[i];
- if(typeof methodName !=='string'){
- throw new Error('方法要为字符串类型');
- }
- this.methods.push(methodName);
- }
- }
- var CompositeInterface = new Interface('CompositeInterface',['add','remove']);
- var FormItemInterface = new Interface('FormItemInterface',['select','update']);
- /**
- * 创建实现类
- */
- function MyImpl(){
- }
- /**
- * 实现接口
- */
- MyImpl.prototype.add = function(){
- alert('add...');
- }
- MyImpl.prototype.remove = function(){
- alert('remove...');
- }
- MyImpl.prototype.select = function(){
- alert('select...');
- }
- // MyImpl.prototype.update = function(){
- // alert('update...');
- // }
- /**
- * 检测是否实现接口中的所有方法
- */
- Interface.ensureImplements = function(object){
- if(arguments.length<2){
- throw Error('参数个数不能小于2个');
- }
- for(var j=1;j<arguments.length;j++){
- var interfaceInstance = arguments[j];
- if(interfaceInstance.constructor !==Interface){
- throw new Error(interfaceInstance+'不是所需接口实例');
- }
- for(var i = 0;i<interfaceInstance.methods.length;i++){
- var methodName = interfaceInstance.methods[i];
- if( !object[methodName] || typeof object[methodName] !=='function'){
- throw new Error(methodName+'不是函数或没有被实现');
- }
- }
- }
- }
- var c1 = new MyImpl();
- Interface.ensureImplements(c1,CompositeInterface,FormItemInterface);
- c1.add();
- </script>
- </head>
- <body>
- </body>
- </html>
javascript鸭式辩型法实现接口的更多相关文章
- js 鸭式辨型法
无意中看到arr.length === +arr.length;这句代码,然后就去了解了下 这是一种鸭式辨型的判断方法. 鸭式辨型:像鸭子一样走路.游泳和嘎嘎叫的鸟就是鸭子 这句话表示: a.arr有 ...
- js类型判断及鸭式辨型
目录 instanceof constructor 构造函数名字 鸭式辨型 三种检测对象的类方式: instanceof.constructor .构造函数名字 用法如下: 1)instanceof ...
- JavaScript 隐式类型转换
JavaScript 隐式类型转换 原文:https://blog.csdn.net/itcast_cn/article/details/82887895 · 1.1 隐式转换介绍 · 1.2 隐式转 ...
- javascript类式继承最优版
直接看实例代码: <!doctype html> <html lang="en"> <head> <meta charset=" ...
- JavaScript正则式入门
正则式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规 ...
- Javascript 链式作用域 function fn(){}和var fn=function(){}区别
其实对于Javascript链式作用域的描述,包括,JS权威指南,都有些太冗长了--但是很准确:JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里. 这句话有点难懂,但 ...
- javascript链式运动框架案例
javascript链式运动框架 任务描述: 当鼠标移入红色矩形时,该矩形宽度逐渐增加至400px,之后高度逐渐增加至400px; 当鼠标移出红色矩形时,该矩形高度逐渐减小至200px,之后宽度逐渐减 ...
- javascript隐式转换详解
Javascript是web前端开发的必学技术,今天和大家分享的就是javascript的基础知识隐式转换,希望可以帮助大家更好的学习. 转换成布尔类型假 undefined->falSe nu ...
- Javascript 链式运动框架——逐行分析代码,让你轻松了解运动的原理
所谓链式运动,就是一环扣一环.我们的很多运动实际上来说指的就是分阶段的,第一个阶段动完,下个阶段开始动. 这个链式运动框架就是用来处理这些问题的. 我们先来看下之前的运动框架,以下是Javascrip ...
随机推荐
- Badboy使用数据源Excel进行脚本参数化
1.首先新建一个Excel,这里示例我写得非常简单,由两由数据组成,第一行为表头.见下图: 2.录制脚本,见上一篇,录制一个非常简单的搜狗查询 3.添加数据源,在Tools面板中找到Data Sour ...
- Java类额应用
基本数据类型包装类 Integer Character 其他的都是将首字母大写; 包装类和基本类型之间的转换: Integer int Integer i = new Integ ...
- git ssh端口号变更之后所需要的修改
假设原本的repository地址为:git@gitlab.cjx.com:jinxin/project2.git 端口变更之后,需要调整为:ssh://git@gitlab.cjx.com:PORT ...
- [转]Direct3D 11 Tessellation Tutorial
The new hardware tessellation feature available on Direct3D 11 video cards has great potential, but ...
- ICMP Protocol
[ICMP Protocol] 参考: 1.ICMP Types and Codes:http://www.nthelp.com/icmp.html 2.RFC 792 - Internet Cont ...
- jdk环境变量的配置并检测是否配置成功
JDK环境变量配置进行java开发,首先安装JDK,安装后进行环境变量配置1,下载JDK(http://java.sun.com/javase/downloads/index.jsp)2.安装jdk- ...
- spark job, stage ,task介绍。
1. spark 如何执行程序? 首先看下spark 的部署图: 节点类型有: 1. master 节点: 常驻master进程,负责管理全部worker节点. 2. worker 节点: 常驻wor ...
- 枚举全排列(包括数列中有重复数)的C语言实现
据说是用了DFS的思想--然鹅并不知道这是DFS. 主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了-- 有重复数的话遇 ...
- sql server 分页存储过程
----------------------分页存储过程------------------------------------------------------------------------ ...
- 控制反转IOC与依赖注入DI
理解 IOC http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html IOC 相关实例 的http:// ...