【发布时间】:2014-02-27 15:31:30
【问题描述】:
有没有更好的方法来合并两个对象并调用父函数?
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”:
b.myFunction();
【问题讨论】:
-
一般的 jQuery 和
$.extend();与 JavaScript 中的继承无关。所有$.extend()所做的只是合并2 个对象,它不太关心prototype或prototype.constructor,$.extend(objA, objB)也不会导致objA instanceof objB为真。说 JavaScript 继承与 jQuery 是非常误导的。
标签: javascript jquery object inheritance parent