2011-07-18 3 views
0

Je objet comme ceci:

var example = { 
    test1: 10, 
    test2: 20, 
    test3: 30 
} 

Pour une raison quelconque, je voulais utiliser test# variables sans example, donc j'étendu window objet comme celui-ci (en utilisant jQuery):

$.extend(window, window, example) 

Mais, chaque fois cette fonction a appelé, la page a été actualisée.

Et une autre question, si je tente d'étendre document de la même manière, une erreur se produit comme ceci: (Chrome)

Error: NAMESPACE_ERR: DOM Exception 14

Pourquoi? Et est-il possible d'utiliser des variables sans nom d'objet (espace de nom)?

+1

Pourquoi vous passez 'window' deux fois? Cela fonctionne-t-il si vous ne faites que $ .extend (window, example) '? – aroth

Répondre

7

Votre appel $.extend fait l'équivalent de ceci:

window.location = window.location; 

Et pour actualiser la page.

La fonction $.extend copie essentiellement toutes les propriétés (en utilisant des affectations simples) du second au dernier argument du premier argument et renvoie le premier argument (mis à jour). Dans votre deuxième argument, window, il y aura la propriété location et lorsque vous affectez quelque chose à window.location, vous changez la page et si les nouvelles et anciennes valeurs location sont identiques, vous actualisez la page en cours.

Si vous souhaitez ajouter toutes les propriétés en example à window, il suffit de faire ceci:

$.extend(window, example); 

En ce qui concerne « Et est-il possible d'utiliser des variables sans nom de l'objet (namespace)? » va, il suffit d'ajouter vos variables en tant que propriétés de window et vous serez en mesure d'y accéder sans préfixe:

window.where_is = "pancakes house?"; 
alert(where_is); 

Par exemple: http://jsfiddle.net/ambiguous/T7cNx/

+0

Voilà une excellente réponse. J'ai oublié d'utiliser '$ .extend (window, example)'. Quoi qu'il en soit, j'ai eu de nouvelles informations. Je vous remercie! –