JavaScript:将子项原型分配给自己?

我对我遇到的一系列
JavaScript代码感到有点困惑,我想了解它的用途:

(function ($, window) {

    var example;

    example = function (a, b, c) {
        return new example.fn.init(a, b, C);
    };

    example.fn = example.prototype = {
        init: function (a, b, c) {
            this.a= a;
            this.b= b;
            this.c= c;
        }    
    };

    example.fn.init.prototype = example.fn; //What does this line accomplish?

    $.example = example;


}(window.jQuery, window));

据我所知,有问题的一行是将子对象的原型分配给自己,这实际上是基础示例对象的原型…为什么可能想要这样做呢?

最佳答案 您的问题中的代码示例实现了一个多用途函数/对象,就像jQuery使用其jQuery(通常别名为$)对象一样.

使用example()函数创建的对象实际上是由example.fn.init()构造函数实例化的.将示例的原型分配给example.fn.init可确保实例公开的成员也由init()实例化的对象公开.

jQuery源代码的相关部分是:

// Define a local copy of jQuery
jQuery = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context, rootjQuery );
}

jQuery.fn = jQuery.prototype = {
    constructor: jQuery,
    init: function( selector, context, rootjQuery ) {
        // Actual implementation of the jQuery() function...
    }
    // Other jQuery.fn methods...
};

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
点赞