2009-08-06 67 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