我正在编写一个 jQuery 插件,并且经常被某些函数的范围弄糊涂(就像使用 jS 时的传统一样)。
一个简短的例子应该会有所帮助:
(function ( $ ) {
var methods = {
init: function ( options ) {
var settings = $.extend ({
a: 100,
b: 200
}, options);
return this.each(function(){
var $this = $(this);
var return_value = $this.plugintest("method_1", settings);
$this.plugintest("method_2", settings, return_value);
});
},
method_1 : function ( settings ) {
var method_1_value_1 = settings.a * 10,
method_1_value_2 = settings.a * 20;
return method_1_value_1;
},
method_2 : function ( settings, old_return_value ) {
// WHAT IF I WANT BOTH method_1_value_1 AND method_1_value_2 in here?
}
};
$.fn.plugintest = function (method) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call ( arguments, 1 ) );
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist in jQuery.robottest' );
}
};
}) (jQuery);
见方法_2。我想访问我在 method_1 中创建的值,但是我只能返回 1 个值 - 我应该创建某种全局变量吗?做这个的最好方式是什么?