2010-10-19 6 views
7

Je suis un débutant confus. Je lis dans un tutoriel que vous créez un objet javascript comme ceci:Quelle est la différence entre déclarer des objets javascript avec var vs. avec fonction?

function myObject() { 
    this.myProperty = "a string"; 
    this.myMethod = function() { 
     //Method code 
    } 
} 

Alors je l'ai lu quelque part ailleurs que vous créez un objet comme ceci:

var myObject = { 
    myProperty: "a string", 
    myMethod : function() { 
     //Method code 
    } 
} 

Quelle est la différence (non-subjective) entre les deux? Y a-t-il une bonne manière officielle et une mauvaise façon?

Répondre

5

Les deux déclarations sont correctes mais elles ont des sémantiques différentes.

Le premier type de déclaration vous permet de créer des instances de vos objets:

var t = new myObject(); 
// then use t 
t.myProperty = "some value"; 

var otherT = new myObject(); 
otherT.myProperty = "some other value"; 

La seconde est presque comme un objet statique :

myObject.myProperty = "some value"; 
+1

Je préfère appeler le second un * singleton * sans constructeur. – galambalazs

+0

Merci de le comparer à un objet statique. C'est une excellente façon de l'expliquer. – randomable

3

Voici une comparaison directe ..

function myObject() { 

Ceci déclare la fonction quand JavaScript est analysé ...

var myObject = function() { 

Ceci déclare la fonction lors de l'exécution.

Si vous utilisez la méthode "var", votre fonction doit être déclarée avant de l'utiliser ... essayez cet exemple.

myFunction(); // Works 
myVarFunction(); // Boom 

var myVarFunction = function() { alert("Hi"); }; 

function myFunction() { alert("Hi"); }; 

Alors pourquoi utiliser la méthode "var" si vous devez faire attention à l'utiliser? Tout est à voir avec la portée ... les fonctions étendues sont considérées meilleures.

MISE À JOUR: Et il y a quelques grandes explications ici:

var functionName = function() {} vs function functionName() {}

+0

Merci pour ce lien! Une réponse a dit que var était étendue, mais une autre réponse l'a corrigée, en disant qu'ils ont tous les deux une portée. Je l'ai testé, et il me semble que var et fonctionnent de la même manière. Ou y a-t-il une autre condition où ils ne le font pas? – randomable

+0

@randomable - oui, la portée dans ce scénario semble causer de la confusion ... Je peux être une autre victime. Vérifiez ceci: https://developer.mozilla.org/fr/JavaScript/Reference/Functions_and_function_scope – Fenton

0

La principale différence entre les deux est que une variable est locale et l'autre est mondiale. "Var" définit essentiellement la portée de la variable. Lorsque nous ajoutons var à une assignation de variable, javascript assure que la variable est confinée à la fonction à laquelle elle est affectée et ne se heurte pas à la même variable de nom dans une autre fonction. Lorsque nous n'utilisons pas var, alors il est déclaré comme une fonction globale et des risques de collision peuvent survenir. Il est donc toujours conseillé d'utiliser "var" avant l'affectation de la valeur variable. Si nécessaire, utilisez une fonction anonyme pour la fermeture.

Questions connexes