javascript - jQuery - 插件选项默认 extend()

标签 javascript jquery jquery-plugins

继好jQuery Plugins/Authoring说明我有一个小问题

(function($){

  // Default Settings
  var settings = {
    var1: 50
  , var2: 100
  };

  var methods = {
    init : function (options) {
      console.log(settings);
      settings = $.extend(options, settings); // Overwrite settings
      console.log(settings);
      return this;
    }
  , other_func: function () {
      return this;
    }
  };

  $.fn.my_plugin = 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 on jQuery.my_plugin');
    }    
  };

})(jQuery);

如果我这样做

>>> $('my_element').my_plugin({var3: 60})
Before Object { var2=100, var1=50}
After Object { var3=60, var2=100, var1=50}
[ my_element ]

>>> $('my_element').my_plugin({var1: 60})
Before Object { var1=50, var2=100}
After Object { var1=50, var2=100}
[ my_element ]

为什么我的 var1 没有被覆盖?

最佳答案

你在你的 $.extend 中混淆了参数的顺序(目标应该在第一位),它应该是:

settings = $.extend(settings, options);

参见 this fiddle docs for $.extend()

为避免混淆,您还可以像这样使用默认设置扩展您的设置:

methods.init = function(options){

  var settings = $.extend({
    key1: 'default value for key 1',
    key2: 'default value for key 2'
  }, options); // <- if no / undefined options are passed extend will simply return the defaults

  //here goes the rest

};

关于javascript - jQuery - 插件选项默认 extend(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9995392/

相关文章:

jquery - fancybox 似乎不适用于 ajax 内容

javascript - Jquery 没有使用像 JRate 插件这样的插件处理新添加的元素到 dom

javascript - 使用自定义矩形 JQuery 裁剪 Canvas 内的图像

javascript - 选择后代元素的最佳方法

javascript - 如何在 javascript HTTP 请求中制作 HTML 标签?

javascript - 无法将 sails-auth 库集成到 sails 项目中

javascript - 解决错误 413 请求实体太大

javascript - 如何使用 Mirth-Javascript 删除 HL7 消息中的换行符?

javascript - 将鼠标悬停在包含其他 div 的 div 上无法按预期工作

javascript - 使用字母选择对 Div 内容进行排序