javascript 多继承简易实现

Javascript想要模拟出OOP的特性,非常麻烦,尤其是在国内资料重复率极高的情况下,想找几篇关于Javascript多继承的文章都难.

普通的继承可以使用Call/Apply或者prototype的方式实现,但是只能继承一级,例如A继承B.

但是多继承的实现就较为困难,网上有不少高手想出寄生继承,拷贝继承的方法.

这里介绍一下prototype拷贝继承,我喜欢称之为原型复制继承.

代码如下:

var deepCopy=function(sendObject){  
    var result={};
    if(sendObject.constructor==Array){
        result=[];
    }
    for(var name in sendObject){
        var obj=sendObject[name];
        if(typeof(obj)==="object"){
            result[name]=arguments.callee(obj);
        }else{
            result[name]=obj;
        }
    }
    return result;
};

var copyPrototype=function(sendObject){  
    //function(sendObject,receiveObject1,receiveObject2,receiveObject3...)
    for(var i=1;i<arguments.length;i++){
        for(var name in sendObject.prototype){
            var obj=sendObject.prototype[name];
            if(typeof(obj)==="object"){
                arguments[i].prototype[name]=deepCopy(obj);
            }else{
                arguments[i].prototype[name]=obj;
            }
        }
    }
};

调用copyPrototype函数,传入sendObject作为父类,后面跟上若干子类即可.

原理很简单,copyPrototype负责将父类的prototype内的所有成员拷贝到子类上,deepCopy进行深拷贝操作.

基于现代浏览器高速的Javascript解析能力,在效率上也不会有太大损失.