如何从jQuery继承

时间:2016-02-22 20:25:53

标签: javascript jquery inheritance

我尝试以下列方式继承:

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继承(而不是扩展)?

1 个答案:

答案 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()