jQuery插件 - 实例化对象

时间:2017-05-09 16:00:10

标签: jquery jquery-plugins

我知道,这已被多次询问,但不知何故,我找不到符合我需要的答案,所以就这样了。

我制作了一个看起来像这样的插件(剥离了):

(function(window, $){

    var MyPlugin = function(elem, options){
        this.elem = elem;
        this.$elem = $(elem);
        this.options = options;
        this.metadata = this.$elem.data('popup-options');
        this.markup = '<div>some markup here</div>';
        this.popup = null;
    };

    MyPlugin.prototype = {
        defaults:{
            type: 'outer',
            color: 'orange'
        },

        init: function(){

            this.config = $.extend({}, this.defaults, this.options, this.metadata);

            this.show();

            return this;
        },

        show: function(){

            // some stuff to show the element

        },

        hide: function(){

            // some stuff to hide the element
        },


        someMethod: function(){

            // some other stuff the plugin does
        }


    };

    MyPlugin.defaults = MyPlugin.prototype.defaults;

    $.fn.myPlugin = function(options){
        return this.each(function(){
            var thePlugin = new MyPlugin(this, options).init();
        });
    };

    window.MyPlugin = MyPlugin;

}(window, jQuery));

现在我在代码中应用了这样的插件:

var thePlugin = $(this).myPlugin();

到目前为止,这都有效。

但是现在,我想从外部访问插件中的一个函数(例如«someMethod»)。

我试着称之为:

thePlugin.someMethod();

thePlugin.myPlugin.someMethod();

甚至

thePlugin.myPlugin[0].someMethod();

这一切都无效。

我如何制作插件,所以我可以在初始化后访问它? 这有可能吗?

1 个答案:

答案 0 :(得分:0)

找到了解决方案。

我不得不像这样更改插件的return语句:

$.fn.updPopup = function(options){
        return new UpdPopup(this, options).init();
};

这只返回插件的一个实例。

然后我可以像这样访问它:

thePlugin.someMethod();

问题仍然存在:我将如何使用原始的return语句访问它(显然我会返回一个对象数组)?