《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); };
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。