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 ...
随机推荐
- AJAX避免服务器调用上个页面缓存的办法
GET 请求 一个简单的 GET 请求: xmlhttp.open("GET","demo_get.asp",true); xmlhttp.send(); 亲自 ...
- iphone 开源汇总(转)
原文地址 http://blog.csdn.net/devday/article/details/6105793 扫描wifi信息: http://code.google.com/p/uwecaugm ...
- Struts2 的 值栈和ActionContext
1.ValueStack 和 ActionContext 的关系与区别: -- 相同点:它们都是在一次HTTP请求的范围内使用的,它们的生命周期都是一次请求 -- 不同点:ValueStack 分为对 ...
- Ubuntu 16.10下的 jdk 1.8.0_111
下载好对应版本的jdk copy到此目录下,并解压: 呼出终端,输入指令: gedit ~/.bashrc 会出现文本编辑界 export JAVA_HOME=/usr/lib/jvm/jdk1.8. ...
- centos分区
/boot :用来存放与 Linux 系统启动有关的程序,比如启动引导装载程序等,建议大小为 100MB . /usr :用来存放 Linux 系统中的应用程序,其相关数据较多,建议大于 3GB 以上 ...
- 试一下SVG
用鼠标点击那个圆形试试 function changeCircle() { var c = document.getElementById("mycircle"); c.setAt ...
- XML中特殊字符转义
/// <summary> /// 特殊字符转义 /// </summary> /// <param name="xml"></param ...
- 'Missing recommended icon file - The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format'
创建120像素的高分辨率和60个像素定期如上,苹果文档中提到,并设置名称的新图标.例如,icon-120.png和icon-152.png. 将这个图标到你的项目资源文件夹并添加该图标到项目: 在此之 ...
- NGUI 按钮点击音效统一管理开启与关闭
之前就只是简单的在每个按钮(或者需要绑定单击事件的UISprite)对象上添加PlaySound组件,但这样就无法统一去设置按钮单击音效的开启与关闭! 由于我都是使用UIEventListener.G ...
- Sublime Text3 (转) 配置 以及快捷键配置
一.介绍 Sublime Text 是一款较新的编辑器,它轻量.简洁.高效,良好的扩展性以及跨平台等特性,使得越来越多的开发人员喜爱.它是一款收费的商业软件,但可以免费无限制无限期的试用,只会偶尔提醒 ...