我尝试以下列方式继承:
function inherits(ctor, base_ctor){
ctor.base = base_ctor;
ctor.prototype = Object.create(base_ctor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true,
}
});
}
function MyClass(){
jQuery.fn.init.call(this,'<form>...</form>');
//...
}
inherits(MyClass, jQuery);
//...
var $my_obj = new MyClass()
当我尝试
时$my_obj.find('#id')
它再次调用MyClass的构造函数(通过函数jQuery.fn.pushStack())
如何避免递归?
或者如何从jQuery继承(而不是扩展)?
答案 0 :(得分:0)
为此目的,jQuery提供了函数jQuery.sub(),然后你可以通过任何方法扩展jQuery的副本,但[FIXME]你可能不会使用自己的构造函数。
你也可以使用以下黑客:
function MyClass(){
if(this.property_that_can_not_be_created_by_jQuery)
return jQuery.apply(this,arguments); // do not use jQuery.fn.init
this.property_that_can_not_be_created_by_jQuery = true;
jQuery.fn.init.call(this,'<form>...</form>');
//...
}
inherits(MyClass, jQuery);
但请注意,pushStack()和任何使用pushStack()的函数(例如appendTo()和insertAfter())将返回由jQuery的cunstructor创建的新对象,如果你想获取对象,那么你的构造函数,你应该使用方法end()