2009-08-06 8 views
0

Après jQuery ne modifie pas la valeur des valeurs par défaut ou des options. La valeur renvoyée est la même que vide. vide a été modifié et rempli avec des données fusionnées. Tout est bon.

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

Cependant, j'ai vu quelqu'un passer la vérité comme première option. Dans ce cas, les valeurs par défaut ont été modifiées. Les valeurs par défaut sont identiques et la valeur renvoyée est la même que la valeur par défaut.

Essayez maintenant de transmettre false.

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

Dans ce cas, les valeurs par défaut et les options ne sont pas modifiées. Donc le passage vrai est identique à

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

Je vais juste m'asseoir ici et prétendre que je sais de quoi tu parles. –

Répondre

1

Ceci est le comportement attendu. Lorsque vous passez true comme premier argument, cela signifie faire une copie profonde, plutôt que de partager la structure de l'objet. L'argument suivant, defaults devient la cible par l'inclusion du paramètre facultatif de copie profonde booléenne lorsque ce paramètre est vrai. Voici l'extrait pertinent de 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; 
} 

Lorsque vous spécifiez false, vous pouvez voir qu'il construit implicitement un nouvel objet qui sera la cible. Cette cible sera une copie profonde des deux objets suivants.

Ceci est documenté dans les options de la fonction extend.

+0

J'utilise cet outil pour voir la documentation. http://view.jquery.com/trunk/tools/api-browser/#link-jQueryextend-targetobject1objectN Maintenant, il semble que l'URL que j'ai l'habitude de regarder est soit obsolète ou n'a que la moitié de l'information. Merci. Je vais commencer à faire référence au document principal de jQuery. –