Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-插件选项默认扩展()_Javascript_Jquery_Jquery Plugins - Fatal编程技术网

Javascript jQuery-插件选项默认扩展()

Javascript jQuery-插件选项默认扩展(),javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,按照好的指示,我有一个小问题 (function($){ // Default Settings var settings = { var1: 50 , var2: 100 }; var methods = { init : function (options) { console.log(settings); settings = $.extend(options, settings); // Overwrite settings

按照好的指示,我有一个小问题

(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
没有被覆盖?

您正在覆盖默认值。尝试创建一个新变量来存储init方法中的设置

  var defaults = {
    var1: 50
  , var2: 100
  };

  var methods = {
    init : function (options) {
      console.log(defaults);
      var settings = $.extend({},defaults,options || {});
      console.log(settings);
      $(this).data("myPluginSettings",settings);
      return this;
    }
  , other_func: function () {
      console.log(this.data("myPluginSettings"));
      return this;
    }
  };

您混淆了
$中参数的顺序。extend
(目标应该是第一个),它应该是:

settings = $.extend(settings, options);
请参见

为避免混淆,您还可以使用以下默认值扩展设置:

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

};
methods.init=函数(选项){
变量设置=$.extend({
键1:'键1'的默认值,
键2:'键2的默认值'
},选项)//