使用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();
}
});