遵循jQuery不会更改默认值或选项的值。返回值与empty相同。empty已更改,并由合并的数据填充。一切都很好。
var empty = {}
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
$.extend(empty, defaults, options);然而,我看到有人将true作为第一个选项。
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var output = $.extend(true, defaults, options);在这种情况下,defaults已被changed.options相同,并且返回值与默认值相同。
现在尝试传递false。
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var output = $.extend(false, defaults, options);在这种情况下,默认值和选项不会更改。因此,传递true与
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var output = $.extend(defaults, options);发布于 2009-08-06 21:56:15
这是预期的行为。当您传入true作为第一个参数时,这意味着进行深度复制,而不是共享对象结构。下一个参数defaults通过包含可选的布尔深度复制参数成为目标,当该参数为真时。下面是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函数的选项中有说明。
https://stackoverflow.com/questions/1241691
复制相似问题