$ .extend文件说明

时间:2009-08-06 21:44:35

标签: jquery

以下jQuery不会更改默认值或选项的值。返回值与empty相同。空已更改并填充合并数据。一切都很好。

var empty = {} 
var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
$.extend(empty, defaults, options);

但是我看到有人作为第一选择传递真实。

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" };  
var output = $.extend(true, defaults, options);

在这种情况下,默认值已更改。选项相同,返回值与默认值相同。

现在尝试传递false。

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var output = $.extend(false, defaults, options);

在这种情况下,默认值和选项不会更改。所以传递真实与

相同
var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var output = $.extend(defaults, options);

1 个答案:

答案 0 :(得分:1)

这是预期的行为。当您传入true作为第一个参数时,这意味着要进行深层复制,而不是共享对象结构。当该参数为true时,下一个参数defaults将成为目标,包含可选的boolean deep copy参数。以下是1.3.2的相关摘录:

// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

// Handle a deep copy situation
if ( typeof target === "boolean" ) {
    deep = target;
    target = arguments[1] || {};
    // skip the boolean and the target
    i = 2;
}

当您指定false时,您可以看到它隐式构造了一个将成为目标的新对象。此目标将是以下两个对象的深层副本。

extend函数的选项中记录了这一点。