为什么init函数在jQuery.prototype中而不是在jQuery的闭包中?

时间:2013-09-13 09:35:53

标签: jquery

为什么jQuery.prototype中的init函数?我把它放在jQuery的闭包中,它工作正常。我这样做了:

(function( window, undefined ) {

    var jQuery = function( selector, context ) {
        return new init( selector, context, rootjQuery );
    }
    var init=function( selector, context, rootjQuery ) {
        ...
    }
    ...
})(...)

谢谢,

Eric J.

1 个答案:

答案 0 :(得分:3)

我们不知道(向图书馆维护人员询问他们的设计理念)。

但是将它作为公共属性提供确实允许overwriting or amending the constructor而不会损害jQuery函数,并使prototypical inheritance成为可能需要在子实例上应用父构造函数的地方:

function MyJQuery(selector, context) {
    this.init(selector, context, MyJQuery.root); // <==
    // or more explicit:
    // jQuery.fn.init.call(this, selector, …);
    …
}
MyJQuery.fn = MyJQuery.prototype = Object.create(jQuery.fn);
MyJQuery.root = jQuery(document);