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 ...
随机推荐
- invoke
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...
- CSS3学习内容与心得
今天2005年7月9号,博客这个东西还真不懂,以前吧我不认识它,它也不认识我.没辙,汤老要我们写,就写吧. 写什么好呢?那就写今天学习的css3的一些要点吧. css这门课程几乎都学完了.而我觉得我还 ...
- EBS 消息总线
http://www.ibm.com/developerworks/cn/webservices/ws-whyesb/ 开发人员为何需要企业服务总线? 本文不仅仅是为架构师准备的:使用企业服务总线 ( ...
- NGUI缓动函数
缓动函数:http://easings.net/zh-cn 研究NGUI的博客:http://dsqiu.iteye.com/category/295721
- hg常用命令
关于hg命令选项 如果你是在windows系统下,使用的是图像界面,你很可能不常用它.但是一旦你了解这些命令之后,会觉得很方便.hg有很多命令,这些命令都有一定的选项,在开始的时候,只知道用它,有时候 ...
- ACM之路(20)—— Splay初探
由于数据结构上老师讲了AVL树的rotate,然后去学了一下treap和Splay,这些数据结构还真是神奇啊! treap暂时只知道名次树的作用(就是一段动态变化的有序数列,找第K大的元素,用set显 ...
- redis实现tomcat集群session共享
1.部署两个tomcat节点,使用nginx实现集群(见http://www.cnblogs.com/zhangzhi0556/articles/nginx.html): 2.redis安装(见h ...
- RabbitMq 集群配置
1. RabbitMQ 所需的附属安装包 1.1 openGL安装 执行命令: [root@localhost local]# yum install mesa-libGL-devel mesa-l ...
- yum -y upgrade 和 yum -y update 区别
分别测试yum -y upgrade和yum -y update 升级前 系统版本: CentOS5.5 内核版本: 2.6.18-194.el5 升级前做过简单配置文件修改 yum -y upgra ...
- Redis基础(转)
ServiceStack.Redis实践 Redis的C#客户端我选择的是ServiceStack.Redis,相比Booksleeve redis-sharp等方案,它提供了一整套从 Redi ...