Я чувствую себя немного невежественным, но я полагаю, что какое-то образование мне не повредит.
Я упростил свой код, чтобы обрисовать проблемы - проблема в том, что когда foo () вызывается изнутриМетод init, он не может получить доступ к предполагаемым глобальным переменным, a, b, c и настройкам.Они определены вне области действия метода, так почему они недоступны?
Например, настройки четко определены непосредственно перед вызовом foo, так почему foo не видит настройки?
(function(jQuery) {
a = new Date();
var b;
var c = 1;
settings = 0; // Here or not - same issue
var methods = {
init : function(settings) {
c = $(this);
settings = jQuery.extend({
id: Math.floor(Math.random()*1001),
x: 3;
etc: 2
}, settings || {});
m = 1;
foo();
}
};
function foo()
{
x = settings.x; // settings is not defined
var n = c.m;
return x;
}
jQuery.fn.bar= function(method) {
if (methods[method]) // If we have a method that exists
{
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
}
else if ( typeof method === 'object' || ! method ) // Otherwise if we get passed an object (settings) or nothing, run the init.
{
return methods.init.apply( this, arguments );
}
else
{
$.error( 'Method ' + method + ' does not exist' ); // Otherwise we have an error.
}
};
})(jQuery);
Есть идеи?