javascript鸭式辩型法实现接口

[html]

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <script charset="UTF-8" type="text/javascript">
  7. /**
  8. * 创建接口类
  9. */
  10. function Interface(name,methods){
  11. if(arguments.length<2){
  12. throw new Error(‘需要传递两个参数‘);
  13. }
  14. this.name = name;
  15. this.methods = [];
  16. for(var i = 1;i<methods.length;i++){
  17. var methodName = methods[i];
  18. if(typeof methodName !==‘string‘){
  19. throw new Error(‘方法要为字符串类型‘);
  20. }
  21. this.methods.push(methodName);
  22. }
  23. }
  24. var CompositeInterface = new Interface(‘CompositeInterface‘,[‘add‘,‘remove‘]);
  25. var FormItemInterface = new Interface(‘FormItemInterface‘,[‘select‘,‘update‘]);
  26. /**
  27. * 创建实现类
  28. */
  29. function MyImpl(){
  30. }
  31. /**
  32. * 实现接口
  33. */
  34. MyImpl.prototype.add = function(){
  35. alert(‘add...‘);
  36. }
  37. MyImpl.prototype.remove = function(){
  38. alert(‘remove...‘);
  39. }
  40. MyImpl.prototype.select = function(){
  41. alert(‘select...‘);
  42. }
  43. // MyImpl.prototype.update = function(){
  44. // alert(‘update...‘);
  45. // }
  46. /**
  47. * 检测是否实现接口中的所有方法
  48. */
  49. Interface.ensureImplements = function(object){
  50. if(arguments.length<2){
  51. throw Error(‘参数个数不能小于2个‘);
  52. }
  53. for(var j=1;j<arguments.length;j++){
  54. var interfaceInstance = arguments[j];
  55. if(interfaceInstance.constructor !==Interface){
  56. throw new Error(interfaceInstance+‘不是所需接口实例‘);
  57. }
  58. for(var i = 0;i<interfaceInstance.methods.length;i++){
  59. var methodName = interfaceInstance.methods[i];
  60. if( !object[methodName] || typeof object[methodName] !==‘function‘){
  61. throw new Error(methodName+‘不是函数或没有被实现‘);
  62. }
  63. }
  64. }
  65. }
  66. var c1 = new MyImpl();
  67. Interface.ensureImplements(c1,CompositeInterface,FormItemInterface);
  68. c1.add();
  69. </script>
  70. </head>
  71. <body>
  72. </body>
  73. </html>

时间: 2024-10-05 04:45:07

javascript鸭式辩型法实现接口的相关文章

201507010852_《Javascript权威指南(第六版)——判断值类型的type函数 、鸭式辩型》(P210-217)

一. 类的扩充 1. 只要扩充原型类,就能动态更新到实例.例如:xxx.prototype.do = function() {//...}; 2. 不建议采用污染JavaScript的方法,如:Object.prototype.methods = function() {//...};   采用<权威指南>9.8.1中的方法添加属性,如:Object.defineProperty(//...); 3. 二. 类和类型 1. isPrototypeOf(); 2. 三. constructor属

周道长浅谈鸭式辩型

Javascript中的鸭式辩型(duck-type):会游泳,会嘎嘎叫,有两条腿的就是鸭子,比如你. 废话少说,直接上一段代码 var iframe=document.createElement("iframe"); document.body.appendChild(iframe); var xArray=window.frames[window.frames.length-1].Array; var arr=new xArray(1,2,3); alert(arr instanc

js 鸭式辨型法

无意中看到arr.length === +arr.length;这句代码,然后就去了解了下 这是一种鸭式辨型的判断方法. 鸭式辨型:像鸭子一样走路.游泳和嘎嘎叫的鸟就是鸭子 这句话表示: a.arr有length这个属性 b.arr.length是一个Number 那么arr可以是array,也可以是string Jquery中要判断一个变量是否是一个数组的确切方法:Object.prototype.toString.call(arr) === '[object Array]'; ES6可以通过

js类型判断及鸭式辨型

目录 instanceof constructor 构造函数名字 鸭式辨型 三种检测对象的类方式: instanceof.constructor .构造函数名字 用法如下: 1)instanceof console.log([1,2,3] instanceof Array); true console.log([1,2,3] instanceof Object); true 尽管构造函数是原型的唯一标识,instanceof运算符的右操作数是构造函数,instanceof实际计算过程中检测的是对

算法-自实现鸭式辨型实现接口

#鸭式辨型实现接口  <script type="text/javascript" charset="UTF-8">   //鸭式辨型实现接口(最完美的javascript实现接口方式)   //核心:一个实现接口的主要目的,检测方法,并实现接口里的方法   //优点:完全面向对象,代码实现统一,解耦      //一.接口类 Class Interface 作用:实例化N个接口   //接口类需要2个参数   //参数1:接口的名字(string)  

《javascript设计模式》读书笔记一(接口)

1.什么是接口 学习过<设计模式>的亲们可能听说过编程的一条原则:"针对接口编程而不是实现编程".那么到底什么是接口呢? 接口定义了一个对象应该有的那些方法的手段,但是不具体规定这些方法的具体实现.学习过C#,或者VB.NET的可能会很清楚.所谓的接口就是一个只有方法名,但没有实现的某种特殊的类. VB.NET中的接口 Public Interface Person Sub say() Sub eat() End Interface Public Class Man Imp

在JavaScript中判断整型的N种方法

整数类型(Integer)在JavaScript经常会导致一些奇怪的问题.在ECMAScript的规范中,他们只存在于概念中: 所有的数字都是浮点数,并且整数只是没有一组没有小数的数字. 在这篇博客中,我会解释如何去检查某个值是否为整型. ECMAScript 5 在ES5中有很多方法你可以使用.有时侯,你可能想用自己的方法:一个isInteger(x)的函数,如果是整型返回true,否则返回false. 让我们看看一些例子. 通过余数检查 你可以使用余数运算(%),将一个数字按1求余,看看余数

JavaScript 32位整型无符号操作

在 JavaScript 中,所有整数字变量默认都是有符号整数,这意味着什么呢? 有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数. 数值范围从 -2^31 - 2^31-1 即 -2147483648 到 2147483647. JavaScript 进行位操作时,是采用32位 有符号 整型,这意味着其转换的结果也是32位有符号整型. 有些时候,我们进行移位会出现意想不到的结果,以下是C语言 与 JS 的对比. C语言 1 unsigned in

javascript隐式转换详解

Javascript是web前端开发的必学技术,今天和大家分享的就是javascript的基础知识隐式转换,希望可以帮助大家更好的学习. 转换成布尔类型假 undefined->falSe null->falSe 数值型0或0.0或NaN->falSe 字符串长度为0->falSe 其它对象->true <html> <head> <meat charSet=”utf-8”> <title></title> <