《Javascript设计模式》笔记二 接口

在Javascript当中模仿接口的方法有三种:注释法,属性检查法和鸭式变形法。三者结合令人满意。

1.注释法

/*
interface Composite{
    function add(child){};
    function remove(child){};
    function getChild(index){};
}
interface FormItem{
    function save(){}
}
*/

//用注释法模仿接口

var Com = function(id,method,action){}

Com.prototype.add = function(child){};

Com.prototype.remove = function(child){};

Com.prototype.getChild = function(index){};

Com.prototype.save = function(){}

注释法缺点:没有检查,也不会抛出错误,靠自觉。

注释法优点:易于实现,重用性。

2.属性检查法

/*
interface Composite{
    function add(child){};
    function remove(child){};
    function getChild(index){};
}
interface FormItem{
    function save(){}
}
*/

//用属性检查法模仿接口
var Composite = function(id,meothod,action){
    this.implementsInterfaces = [‘Composite‘,‘FormItem‘];
};

function addForm(formInstance){
    if(!implements(formInstance,‘Composite‘,‘FormItem‘)){
        throw new Error(‘Object does not implement a required interface‘);
    }
}

function implements(object){
    for(var i = 1; i < arguments.length; i++){
        var interfaceName = arguments[i];
        var interfaceFound = false;
        for(var j = 0; j < object.implementsInterfaces.length; j++){
            if(object.implementsInterfaces[j] == interfaceName){
                interfaceFound = true;
                break;
            }

        }
        if(!interfaceFound){
            return false;
        }
    }
    return true;
}

3.填鸭变型法

var Composite = new Interface(‘Composite‘,[‘add‘,‘remove‘,‘getChild‘]);

var FormItem = new Interface(‘FormItem‘,[‘save‘]); 

var CompositeForm = function (id,method,action){ 

}; 

 function addForm () {
        ensureImplements(formInstance,Composite,FormItem);
};
时间: 2024-08-05 12:49:25

《Javascript设计模式》笔记二 接口的相关文章

Javascript设计模式系列二

创建对象的基本模式,一.门户大开型,二.采用下划线来表示属性和方法的私用性,三.使用闭包来创建私用的成员. 一.门户大开型.只能提供公用成员.所有属性和方法都公开的.可访问的.这些共用属性都要使用this关键字来创建. <script type="text/javascript"> ////定义Dog对象 var Dog = function (name, age) { this.name = name; this.age = age; } Dog.prototype.Sa

JavaScript基础笔记二

一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变参(不定参)arguments function sum (a,b) { var result=0; var i=0; for(i=0;i<arguments.length;i++) { result+=arguments(i); } alert(resulet); } sum(12,5,7,5,5

重读《JavaScript设计模式》- 接口

接口 和Class一样,JavaScript也没有对接口的原生支持. 下面是书中三种实现接口的方式:   提示 实际环境中我们会对书中的方案进行取舍 注释 注释法用文档来约束代码,不是强制约束,只能靠开发人员自觉维护. 优点是不用额外代码支持,不会增大文件大小,不会影响执行速度. 缺点是无法提供检查,错误信息. # interface Composite # add(child) # remove(child) # getChild(index) # # interface FormItem #

javascript学习笔记(二)

一.javascript的放置.注释.输出工具 1.输出工具 a.alert():属于window中的全局函数.无论写入什么,都以字符串形式输出. b.document.write():向网页输出内容. c.var vlaue=prompt("显示内容","文本框显示内容")value为返回值:弹出一个输入框,接收参数. <script> alert(123); document.write("<h1>周静文</h1>&

JavaScript设计模式之一Interface接口

什么是接口? 接口提供了一种用以说明一个对象应该具有哪些方法和手段. 在面向对象的javascript中,接口有些什么作用呢?既定的一批接口具有自我描述性,并能促进代码重用.接口可以告诉程序员一个类实现了哪些方法,从而帮助其使用这个类. 在C#还是JAVA中都应该面向接口设计我们的程序,在C#和Java中都Interface这样的关键字,但是JavaScript中没有相应的机制,但是Javascript很灵活,我们可以用它的特性去模仿Interface. 使用 Interface.js var

javascript 设计模式(二)

(function(){ //在js中我们利用function来定义类 function Shape(){ //在类的内部使用var声明的为私有变量 var x = 1; var y = 1; }; //利用new关键字进行类的实例化 var oShape = new Shape(); console.log(oShape.x);//undefined,类的实例化对象中不能访问到私有变量 //如何在类中定义公有变量 function Parent(){ this.x = 1; this.y =

前端乱煮之javascript学习笔记二

1 javascript的隐式转换规则: 若有布尔类型,则将它转换为数值进行比较. 若有NaN,一律返回false 若是字符串,则分为三种情况:对方为字符串就直接比较,对方为数值,则将字符串转化为数值,若对方为对象,则将对象用toString()的方法进行转换,然后再比较.最后,若是其他,则一律返回false. 若是数字,如果对方是对象,用valueOf()进行比较,其余一律返回false null 和defined不会进行类型转换,但是二者相等. 2 javascript中的break和con

&lt;JavaScript 读书笔记二&gt;

1.类与对象 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的.JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像我们常听说的HASH表.字典.健/值对?),而其中的值类型可能是内置类型(如number,string),也可能是对象.(在笔记一种有代码示例) 2.用 function 关键字模拟 cl

PHP设计模式笔记二:面向对象 -- Rango韩老师 http://www.imooc.com/learn/236

SPL标准库的使用 SPL是用于解决典型问题(standard problems)的一组接口与类的集合. 1.SPL提供了很多数据结构类,如SplStack.SqlQueue.SqlHeap.SplFixedArray等 实例代码如下: a.栈 b.队列 c.定长数组 2.PHP链式操作的实现 index.php IMooc/Database.php 3.PHP魔术方法 a.__get\__set:对象属性的管理 index.php Object.php output : string(19)