如何在对象内部调用特定函数?

时间:2018-09-04 15:55:41

标签: javascript jquery function object prototype

这是我的Javascript的一部分,来自jQuery插件。 这个插件让我制作了一个div部件,其中加载了远程html内容,并带有一个带有刷新按钮的工具标题,用于重新加载远程内容。 我需要调用_loadAjaxFile函数来从该插件之外的其他函数(例如按钮)中重新加载内容,但是我无法理解这是否可行以及如何实现。

(function ($, window, document, undefined) {

    function Plugin(element, options) {
        this.obj = $(element);
        this.o = $.extend({}, $.fn[pluginName].defaults, options);
        this.objId = this.obj.attr('id');
        this.pwCtrls = '.jarviswidget-ctrls';
        this.widget = this.obj.find(this.o.widgets);
        this.toggleClass = this.o.toggleClass.split('|');
        this.editClass = this.o.editClass.split('|');
        this.fullscreenClass = this.o.fullscreenClass.split('|');
        this.customClass = this.o.customClass.split('|');
        this.storage = {enabled: this.o.localStorage};
        this.initialized = false;

        this.init();
    }

    Plugin.prototype = {

    _loadAjaxFile: function (awidget, file, loader) {

            var self = this;

            awidget.find('.widget-body')
                .load(file, function (response, status, xhr) {

                    var $this = $(this);

                    if (status == "error") {
                        $this.html('<h4 class="alert alert-danger">' + self.o.labelError + '<b> ' +
                            xhr.status + " " + xhr.statusText + '</b></h4>');
                    }

                    if (status == "success") {

                        var aPalceholder = awidget.find(self.o.timestampPlaceholder);

                        if (aPalceholder.length) {

                            aPalceholder.html(self._getPastTimestamp(new Date()));
                        }

                        if (typeof self.o.afterLoad == 'function') {
                            self.o.afterLoad.call(this, awidget);
                        }
                    }

                    self = null;
                });
            this._runLoaderWidget(loader);

        },

    }

})(jQuery, window, document);

这是插件的完整代码

enter link description here

1 个答案:

答案 0 :(得分:3)

作者_告诉您不要直接调用它。这并不意味着您不能,但您不应该。您将使用不应该直接使用的内部构件。

我假设您引用的内容不完整,但是该功能在Plugin.prototype上的事实意味着您可以在插件 instances 上调用它。如何获得插件实例以调用它(以及是否可以)取决于插件(请参见其文档)。它可能永远不会直接向您的代码公开实例,而只是通过添加到jQuery.fn的名称来使其功能可用。