Javascript 如何在对象内调用特定函数?
这是我的javascript的一部分,取自jquery插件。 这个插件让我可以制作一个包含加载了远程html内容的div小部件,以及一个带有刷新按钮的工具头,用于重新加载远程内容。 我需要调用一个_loadAjaxFile函数来从这个插件之外的其他函数(例如按钮)重新加载内容,但我无法理解这是否可能以及如何实现Javascript 如何在对象内调用特定函数?,javascript,jquery,function,object,prototype,Javascript,Jquery,Function,Object,Prototype,这是我的javascript的一部分,取自jquery插件。 这个插件让我可以制作一个包含加载了远程html内容的div小部件,以及一个带有刷新按钮的工具头,用于重新加载远程内容。 我需要调用一个_loadAjaxFile函数来从这个插件之外的其他函数(例如按钮)重新加载内容,但我无法理解这是否可能以及如何实现 (function ($, window, document, undefined) { function Plugin(element, options) {
(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);
(函数($,窗口,文档,未定义){
函数插件(元素、选项){
this.obj=$(元素);
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:函数(awidget、文件、加载器){
var self=这个;
awidget.find(“.widget body”)
.load(文件、函数(响应、状态、xhr){
var$this=$(this);
如果(状态=“错误”){
$this.html(“”+self.o.labelError+“”+
xhr.status+“”+xhr.statusText+“”);
}
如果(状态=“成功”){
var aPalceholder=awidget.find(self.o.timestampholder);
if(aPalceholder.length){
html(self._getPastTimestamp(newDate());
}
if(self.o.afterLoad的类型=='function'){
self.o.afterLoad.call(this,awidget);
}
}
self=null;
});
此._runLoaderWidget(加载器);
},
}
})(jQuery、窗口、文档);
这是插件的完整代码
上面的
\uu
是作者告诉你不要直接给它打电话。这并不意味着你不能,但你不应该。您将使用不打算直接使用的内部构件
我假设您所引用的内容不完整,但该函数位于Plugin.prototype上这一事实意味着您可以在Plugin实例上调用它。如何获得插件实例来调用它(以及是否可以)取决于插件(查看其文档);它可能永远不会直接向您的代码公开实例,而只是通过它添加到
jQuery.fn
中的名称来提供其功能。它上面的\ucode>是作者告诉您不要直接调用它。这并不意味着你不能,但你不应该。您将使用不打算直接使用的内部构件
我假设您所引用的内容不完整,但该函数位于Plugin.prototype上这一事实意味着您可以在Plugin实例上调用它。如何获得插件实例来调用它(以及是否可以)取决于插件(查看其文档);它可能永远不会直接向您的代码公开实例,而只是通过它添加到jQuery.fn
的名称提供其功能。您应该能够使用插件调用它。_loadAjaxFile()
,因为_loadAjaxFile只是插件原型上的一个方法。@FranCarstens插件
不在全局范围内,它是IIFE的本地版本。@FranCarstens-而且它在任何情况下都不在插件上;这是在Plugin.prototype上。很抱歉,我误读了。请告诉我们您是如何在代码中使用该插件的。还有,这是完整的代码吗?它似乎缺少了init
方法。您应该能够使用插件调用它。_loadAjaxFile()
,因为_loadAjaxFile只是插件原型上的一个方法。@FranCarstens插件
不在全局范围内,它是IIFE的局部。@FranCarstens-而且它在任何情况下都不在插件上;这是在Plugin.prototype上。很抱歉,我误读了。请告诉我们您是如何在代码中使用该插件的。还有,这是完整的代码吗?看起来它缺少了init
方法,完全正确,但这么多的猜测可能会解决这个问题:-)@Bergi-有时我觉得它既适合回答问题,也适合VTC。上面唯一的猜测是很明显的:OP漏掉了很多插件代码。不幸的是,没有关于插件的文档。@danny36-结合您引用的代码,我觉得您想找到另一个插件或编写自己的东西。但是如果你继续使用这个,你必须研究它的来源,看看是否有办法访问一个实例。完全正确,但这么多的猜测可能会让问题结束:-)@Bergi-有时我觉得它对答案和VTC都合适。上面唯一的猜测是很明显的:OP漏掉了很多插件代码。不幸的是,没有关于插件的文档。@danny36-结合您引用的代码,我觉得您想找到另一个插件或编写自己的东西。但是如果您继续使用这个,您必须研究它的源代码,看看是否有方法访问实例。