options变量未定义

时间:2016-11-10 04:10:27

标签: jquery plugins

我正在创建我的第一个插件并遇到一些挑战。我定义了几个全局变量:默认值和选项。我正在遵循这样的插件模式:

 (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变量是未定义的。怎么可能?我将它声明为全局变量,因此可以在任何地方访问它。请解释一下。

2 个答案:

答案 0 :(得分:0)

  

然而,当我调用函数HightlightDays()时,条件   如果语句抛出错误,则表明选项变量未定义。   怎么可能?我将它声明为全局变量,因此它可以   随处访问。

optionsundefinedoptions在调用$.fn.button_carousel时分配给$.extend({}, defaults, options)标识符时,options的实例范围定义为$.fn.button_carousel()

您可以将options传递给HighlightDays()

HighlightDays(options)

plnkr http://plnkr.co/edit/tqwIzaqin0HFHweE9h41?p=preview

答案 1 :(得分:0)

添加到访客答案中,如果您倾向于在函数中进一步使用它,您可以像window.options那样使用它,以便您可以在任何地方使用它。范围不会局限于一个函数。