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];

            }

        }

    }

}

 

你可能感兴趣的:(JavaScript)