var defaults = { foreground: 'red', background: 'blue' };
var options= { foreground: 'green', background: 'green' };
var opts = $.extend(defaults, options),和 var opts = $.extend({},defaults, options);有什么区别?

解决方案 »

  1.   


    示例
    合并 settings 和 options,修改并返回 settings。 jQuery 代码:var settings = { validate: false, limit: 5, name: "foo" };
    var options = { validate: true, name: "bar" };
    jQuery.extend(settings, options); 
    结果:settings == { validate: true, limit: 5, name: "bar" } 
    --------------------------------------------------------------------------------合并 defaults 和 options, 不修改 defaults。 jQuery 代码:var empty = {}
    var defaults = { validate: false, limit: 5, name: "foo" };
    var options = { validate: true, name: "bar" };
    var settings = jQuery.extend(empty, defaults, options); 
    结果:settings == { validate: true, limit: 5, name: "bar" }
    empty == { validate: true, limit: 5, name: "bar" } 第一个参数原始值会被修改
      

  2.   

    第一种合并defaults和options,修改并返回defaults
        结果:defaults== {foreground:'green',background:'green'};
    第二种合并defaults和options,不修改defaults
        结果:opts= { foreground: 'green', background: 'green' };
      

  3.   

    自己写个简单的demo比较下就知道了
    第一种会修改参数一defaults的值
    第二种则是把参数二和参数三的值和到一处,赋值给参数一
    并且参数二中没有参数三的数据,会被填充到参数一,如果有的值不同的会改变值