日期:2014-05-16  浏览次数:20367 次

如何 mixin
JScript code

// 以下代码目的: 使得类aa获得类bb的所有功能,即拥有 .aa .bb .bbfn()
function aa() {//类 aa
    this.aa = 'aaa';
}
function bb() {//类 bb
    this.bb = 'bbb';
}
bb.prototype.bbfn = function() {
    alert('bb');
};
function forEachObj(o, fn) {
    for (var i in o) {
        fn(o[i], i);
    }
}

function apply(o1, o2) {
    forEachObj(o2, function (value, i) {
        o1[i] = value;
    });
}

function mixin(class1, class2) {
    apply(class1.prototype, class2.prototype);
}

mixin(aa, bb);
var x = new aa();

console.info(x);





但构造函数没有被复制到aa里,所以试了下修改构造函数,但是不成功:
JScript code

function mixin(class1, class2) {
    apply(class1.prototype, class2.prototype);
    class1.prototype.constructor = function() { //把构造函数改成任意函数,但没有弹出alert
        alert('new');
    };
}



请问构造函数如何修改?

------解决方案--------------------
x.bbfn();
x.constructor();试了下可以弹出
------解决方案--------------------

JScript code
function mixin(class1, class2) {
    //apply(class1.prototype, class2.prototype);
    class1.prototype = new class2();
    class1.prototype.constructor = class1;
}