hello world

javascript鸭辨式模仿接口

var Interface = function(name,methods){
    if(arguments.length != 2){
        throw new Error("Interface constructor called with" + arguments.length+"arguments,but expected exactly 2.");
    }
    
    this.name;
    this.methods = [];
    for(var i = 0,len = methods.length; i < len; i++){
        if(typeof methods[i] !== 'string'){
            throw new Error("Interface constructor expects method names to be passed in a STRING");
        }
        this.methods.push(methods[i]);
    }
};
//define a interface: var NewInterface = interface('NewInterface',[funa,funb...]);
Interface.ensureImplements = function(object){
    if(arguments.length < 2){
        throw new Error("Function Interface.ensureImplements called with" + arguments.length + "arguments,but expected at least 2.");
    }
    
    for(i = 1,len = arguments.length; i < len; i++){
        var interface = arguments[i];
        if(interface.constructor !== Interface){
            throw new Error("Function Interface.ensureImplements expects arguments two and above to be instance of Interface.");
        }
        for(var j = 0,methodsLen = interface.methods.length;j < methodsLen;j++){
            var method = interface.methods[j];
            if(!object[method] || typeof object[method] !== 'function'){
                throw new Error("Function Interface.ensureImplements:does not implement the " + interface.name + "interface.Method" + method + "was not found.");
            }
        }
    }
}
//Interface.ensureImplements(object,interface_a,interface_b);

鸭辨式的写法是我觉得比较好的一种接口方式。

只要在成品之前检测完后删掉就可以。

首先定义一个接口

var NewInterface = interface('NewInterface',[funa,funb...]);

名字就是
NewInterface
然后进行检测


Interface.ensureImplements(object,interface_a,interface_b);
注意
object是需要检测是否实现接口的对象【注意必须是实例化以后的对象,因为javascript的原型链比较繁】。
posted @ 2012-04-21 21:40  水御双氛  阅读(241)  评论(0编辑  收藏  举报