我遵循这个常见设计模式的样板jquery插件,我无法在原型中的任何位置调用构造函数内的特权方法this.service()。如何从原型内部调用this.service(),而不仅仅是在原型的init中?
总的来说,我要做的是能够访问此插件中的变量,该变量只会在插件的此实例中受到影响和更改。该变量应该放在其他地方吗?该变量在我的代码中命名为variableToAccess。也许我对这一切都错了。感谢。
插件的调用如下
$('article').comment();
这是插件
;(function ( $, window, document, undefined ) {
// Create the defaults once
var pluginName = 'defaultPluginName',
defaults = {
propertyName: "value"
};
// The actual plugin constructor
function Plugin( element, options ) {
this.element = element;
this.options = $.extend( {}, defaults, options) ;
this._defaults = defaults;
this._name = pluginName;
var variableToAccess = false;//<----should this be somewhere else?
this.service = function() {
variableToAccess = true;
};
this.init();
}
Plugin.prototype = {
init: function() {
Plugin.prototype.doSomething();
},
doSomething: function() {
this.service()//<----doesn't work
}
}
$.fn["comment"] = function ( options ) {
return this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName,
new Plugin( this, options ));
}
});
}
})( jQuery, window, document );
答案 0 :(得分:0)
我在这里可能不正确,但我不相信你应该通过Plugin.prototype.doSomething()调用doSomething()。
this.doSomething();应该调用该方法。请参阅以下内容:
function Plugin( element, options ) {
this.element = element;
this.options = $.extend( {}, defaults, options) ;
this._defaults = defaults;
this._name = pluginName;
var variableToAccess = false;
this.service = function() {
variableToAccess = true;
};
this.init();
}
Plugin.prototype = {
init: function() {
this.doSomething();
},
doSomething: function() {
this.service();
}
};
$.fn.comment = function ( options ) {
return this.each(function () {
if ( !$.data(this, 'plugin_' + pluginName) ) {
$.data(this, 'plugin_' + pluginName,
new Plugin( this, options ));
}
});
};