javascript设计模式5
子类引用父类
function extend(subClass,superClass){ var F=function(){}; F.prototype=superClass.prototype; subClass.prototype=new F(); subClass.prototype.constructor=subClass; subClass.superClass=superClass.prototype; if(subClass.prototype.constructor==Object.prototype.constructor){ superClass.prototype.constructor=superClass; } }
原型式继承
var Person={ name:'default name', getName:function(){ return this.name; } };
用工厂模式
var CompoundObject={}; CompoundObject.string1='default value', CompoundObject.createChildObject=function(){ return{ bool:true, num:10 } }; CompoundObject.childObject=CompoundObject.createChildObject(); var compoundObjectClone=clone(CompoundObject); compoundObjectClone.childObject=CompoundObject.createChildObject(); compoundObjectClone.childObject.num=5;
例子中的clone函数
function clone(object){ function F(){} F.prototype=object; return new F; }
掺元类:通过扩充的方式共享函数
var Mixin=function(){}; Mixin.prototype={ serialize:function(){ var output=[]; for(key in this){ output.push(key+':'+this[key]); } return output.join(','); } }
function augment(receivingClass,givingClass){ if(arguments[2]){ for(var i=2,len=arguments.length;i<len;i++){ receivingClass.prototype[arguments[i]]=givingClass.prototype[arguments[i]]; } } else{ for(methodName in givingClass.prototype){ if(!receivingClass.prototype[methodName]){ receivingClass.prototype[methodName]=givingClass.prototype[methodName]; } } } }