首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

js掺元类的实现

作者:  时间: 2011-06-03

掺元是个奇特的方法,与平时遇到的继承有点不同。在C++和Python这类语言中允许子类继承多个父类。我们也可以把掺元类式看成是多亲继承。

顾名思义,掺元就是往类中添加额外的成员加以扩充。

我们这样定义父类

var Person = function(){
    this.name = 'default name';
} 
Person.prototype = {
    getName : function(){
        return this.name;
    } 
}

掺元类,输出类的所有成员

var Mixin = function(){};
Mixin.prototype = {
    serialize : function(){
        var output = [];
        for(key in this){
            output.push(key + " : " + this[key]);
        }
        return output.join(',');
    }
}

接下来弄个函数实现他们的继承关系

function augment(reciveClass, giveClass){
    for(method in giveClass.prototype){
        if(!reciveClass.prototype[method]){
            reciveClass.prototype[method] = giveClass.prototype[method];
        }
    }
}
augment(Person, Mixin);

var p = new Person();
alert(p.serialize());

这样子Person就有了serialize 方法了。

掺元类更适合用一些方法扩充一个类,类式与多亲继承。不过这种方案适用的场合不多,只有那些彼此大不相同的各种类中都派上用场的方法才适合共享。