以下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);
答案 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函数的选项中记录了这一点。