Javascript 将配置对象传递给jQuery插件

Javascript 将配置对象传递给jQuery插件,javascript,jquery,Javascript,Jquery,我经常使用下面的设计模式来创建jQuery插件。我在插件中指定默认值,并允许用户在初始化插件时更改它们。通常,我的default对象只包含字符串属性,而不是对象,但这次,我希望将其中一个默认属性设置为对象(default\u obj\u 1)。在脚本的底部,您可以看到我试图通过传递plugin{default\u value\u 2:666,default\u obj\u 1.default\u prop\u 3:434}来更改的一个属性,但它导致JavaScript无效并出错。我还尝试传递它{

我经常使用下面的设计模式来创建jQuery插件。我在插件中指定默认值,并允许用户在初始化插件时更改它们。通常,我的
default
对象只包含字符串属性,而不是对象,但这次,我希望将其中一个默认属性设置为对象(
default\u obj\u 1
)。在脚本的底部,您可以看到我试图通过传递plugin
{default\u value\u 2:666,default\u obj\u 1.default\u prop\u 3:434}
来更改的一个属性,但它导致JavaScript无效并出错。我还尝试传递它
{default\u value\u 2:666,default\u obj\u 1:{default\u prop\u 3:434}
,但它似乎覆盖了其他应该保留的值

如何只更新jQuery插件中的一个默认值

(function($){
    var defaults = {
        default_value_1 : 123,
        default_value_2 : 321,
        default_value_3 : 111,
        default_obj_1   : {
            default_prop_1  : 444,
            default_prop_2  : 534,
            default_prop_3  : 231
        }
    };

    var methods = {
        init : function (options) {
            var settings = $.extend({}, defaults, options);
            return this.each(function () {
                //Do something using settings
            });
        }
    };

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

    }(jQuery));

$(function(){

    var myPlugin=$('#elem').myPlugin({default_value_2:666,default_obj_1.default_prop_3:434});

    var myPlugin=$('#elem').myPlugin({default_value_2:666,default_obj_1:{default_prop_3:434} });

});
更改:

var settings = $.extend({}, defaults, options);


进行深度(递归)合并。

Ah-ha!谢谢Mathlentics。我需要运行,但回来后会进行测试,并选择此作为答案(前提是它有效:)
var settings = $.extend(true, {}, defaults, options); // notice the first param TRUE