我正在创建我的第一个插件并遇到一些挑战。我定义了几个全局变量:默认值和选项。我正在遵循这样的插件模式:
(function ( $ ) {
var defaults;
var options;
$.fn.button_carousel = function(options){
console.debug("initializing button carousel");
defaults = {
days_in_month: 0,
starting_day: 0,
days_with_appointments: null,
btnAppointmentFontColor: "#556b2f"
};
options = $.extend({}, defaults, options);
console.debug("options: days_in_month: " + options.days_in_month +
"options: staring_day: " + options.starting_day +
"options: days_with_appointments: " + options.days_with_appointments);
...
HighlightDays();
return this.each(function(){
console.log(options);
});
};
function HighlightDays()
{
if(options.days_with_appointments != undefined && options.days_with_appointments != null)
{
...
}
}
}( jQuery ));
查看调试语句。它按预期打印出每个属性的值。但是,当我调用函数HightlightDays()时,if语句的条件会引发一个错误,指出options变量是未定义的。怎么可能?我将它声明为全局变量,因此可以在任何地方访问它。请解释一下。
答案 0 :(得分:0)
然而,当我调用函数HightlightDays()时,条件 如果语句抛出错误,则表明选项变量未定义。 怎么可能?我将它声明为全局变量,因此它可以 随处访问。
options
是undefined
。 options
在调用$.fn.button_carousel
时分配给$.extend({}, defaults, options)
标识符时,options
的实例范围定义为$.fn.button_carousel()
。
您可以将options
传递给HighlightDays()
HighlightDays(options)
答案 1 :(得分:0)
添加到访客答案中,如果您倾向于在函数中进一步使用它,您可以像window.options
那样使用它,以便您可以在任何地方使用它。范围不会局限于一个函数。