2009-08-06 61 views
0

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

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); 

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

现在尝试传递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); 
+1

我只是要坐在这里假装我知道你在说什么。 – 2009-08-06 21:49:38

回答

1

这是预期的行为。当你作为第一个参数传入true时,意味着要进行深层复制,而不是共享对象结构。当该参数为true时,下一个参数defaults成为包含可选boolean深度复制参数的目标。下面是从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; 
} 

当你指定假的,你可以看到,它含蓄地构建一个新的对象,这将是目标。该目标将是以下对象的深层副本。

这被记录在extend函数的选项中。

+0

我使用这个工具来查看文档。 http://view.jquery.com/trunk/tools/api-browser/#link-jQueryextend-targetobject1对象N 现在看来,我曾经看过的网址是旧的或只有一半的信息。 谢谢。我将开始引用主要的jQuery文档。 – 2009-08-07 02:37:22