使用jQuery调用父函数的JavaScript继承

使用jQuery调用父函数的JavaScript继承,javascript,jquery,object,inheritance,parent,Javascript,Jquery,Object,Inheritance,Parent,有没有更好的方法来合并两个对象并调用父函数 var a = { a:1, myFunction:function(){ console.info("a"); } } var b = { b:2, myFunction:function(){ console.info("b"); this.callParent(); } } var obj = {}; $.extend(obj, a); $.extend(

有没有更好的方法来合并两个对象并调用父函数

var a = {
   a:1,
   myFunction:function(){
       console.info("a");
   }
}

var b = {
    b:2,
    myFunction:function(){
        console.info("b");
        this.callParent();
    }
}

var obj = {};
$.extend(obj, a);
$.extend(obj, b);
b = obj;
b.superclass = a;
包装所有函数,以便出现“this.callParent”

function wrap(func, parent) {
    return function() {
        this.callParent = parent;
        var result = func.apply(this, arguments);
        return (this.callParent), result;
    };
}
通过迭代,例如:

$.each(b, function(key, value){
        if(typeof value == "function" && b.superclass && b.superclass[key]){
            b[key] = wrap(value, b.superclass[key]);
        }
});
输出为“b->a”:

有没有更好的方法来合并两个对象并调用父函数

var a = {
   a:1,
   myFunction:function(){
       console.info("a");
   }
}

var b = {
    b:2,
    myFunction:function(){
        console.info("b");
        this.callParent();
    }
}

var obj = {};
$.extend(obj, a);
$.extend(obj, b);
b = obj;
b.superclass = a;
是的,使用单个辅助函数一步完成,而不是使用
$.extend

请注意,jQuery的
extend
函数并没有真正设置任何继承,它只是可以用于mixin——您不应该在引用该函数时使用术语“继承”。此外,您的对象
a
b
绝对不是“类”,因此请不要将其命名为
。超类
。他们充其量只是单身

您可以按照您建议的方式进行继承,但请注意,它不是JavaScript中所期望的原型继承

function inheritObject(parent, child) {
    for (var p in parent)
        if (!(p in child))
            child[p] = parent[p]; // extend
        else if (typeof child[p] == "function") (function(name, fn) {
            child[name] = function() { // inherit
                this.callParent = parent[name];
                var res = fn.apply(this, arguments);
                delete this.callParent;
                return res;
            };
        }(p, child[p]));
    return child;
}


jQuery和
$.extend()与JavaScript中的继承无关。
$.extend()
所做的只是合并两个对象,它不太关心
原型
原型.构造函数
,也不会
$.extend(objA,objB)
导致objB的
objA实例
为真。用jQuery说JavaScript继承是非常误导人的。
var a = {
   a:1,
   myFunction:function(){
       console.info("a");
   }
}

var b = inheritObject(a, {
    b:2,
    myFunction:function(){
        console.info("b");
        this.callParent();
    }
});