为什么这个插件模式 note return 是我所期望的?

Why is this plugin pattern not return wjat I would expect?

我正在尝试使用模块化模式创建一个 jQuery 插件,以便我可以将它与 requirejs 一起使用。我期待下面的代码以一种方式运行,但事实并非如此。我希望如果有人能向我解释为什么它没有返回我认为应该返回的内容,我会帮助我理解。这是代码:

define(['jquery'], function($){

'use strict';

var pluginName = "myPluginName";

var Plugin = function( element, options ) {

    var _init = function() {
        console.log("hey");
    }

    return  {
        init: _init;
    }

}

$.fn[pluginName] = function ( options ) {
    return this.each(function () {
        if (!$.data(this, "plugin_" + pluginName)) {
            $.data(this, "plugin_" + pluginName,
            new Plugin( this, options ));
        }
    });
};});

现在有了上面的内容,我期待这会记录 "hey"

$('#elemId').myPluginName().init() //returns a jquery object

如有任何解释,我们将不胜感激。谢谢

$('#elemId').myPluginName() return 一个 jQuery 对象。

要执行 init(),您必须访问数据属性中的插件对象

$('#elemId').myPluginName().data('plugin_myPluginName')

这将return对象init: () {}可以执行$('#elemId').myPluginName().data('plugin_myPluginName').init()

var pluginName = "myPluginName";

var Plugin = function( element, options ) {

    var _init = function() {
        console.log("hey");
    }

    return  {
        init: _init
    }

}

$.fn[pluginName] = function ( options ) {
    return this.each(function () {
        if (!$.data(this, "plugin_" + pluginName)) {
            $.data(this, "plugin_" + pluginName,
            new Plugin( this, options ));
        }
    });
};

console.log($('body').myPluginName().data('plugin_myPluginName'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>