2011-01-28 2 views
1

Donc, c'est plus une question en raison de "ne pas connaître le bon mot, donc je ne peux pas le google up" (je pense).Différence entre var someObj = {}; et var someObj = new RealObj

Ce que je me suis demandé avec javascript. On peut créer deux "types" d'objets.

On serait: (ou par l'aide de prototypes)

function Foo(){ 
    this.bar = function(){}; 
} 

var foo = new Foo(); 

L'autre être:

var foo = { 
    bar : function(){} 
}; 

Les seules quelques différences que je peux trouver serait le fait que l'ancien utilise des prototypes et peut "s'étendre" à partir d'autres objets et permet également plusieurs instances où cette dernière ne peut avoir qu'une instance et ne peut pas être étendue (de la même manière) (corrigez-moi si je me trompe)

Cependant, dans ce cas, la variable nommée var foo a exactement les mêmes propriétés dans les deux cas. Donc, pour une question concrète: quel est le nom du type d'objet créé (comment puis-je rechercher plus d'informations sur google pour cela) dans cette dernière version et quelles différences y a-t-il entre les deux façons de créer un objet?

Répondre

3

Les différences que vous décrivez sont correctes.

Cette dernière est appelée notation littérale d'objet et est plus concise si vous voulez juste créer un objet. Mais ils sont pas deux types d'objets différents. La notation littérale d'objet est plus comme un raccourci (mais préféré) pour créer des objets.

Vous souhaiterez peut-être lire MDC - Working with objects.

La notation littérale est en fait la même chose que faire:

var foo = new Object(); 
foo.bar = function() {}; 

mais comme déjà dit, il est plus concis et plus facile à lire.

Mise à jour:

Peut-être une autre différence à noter: L'appel new Foo() ne signifie pas nécessairement que vous obtiendrez un « Foo objet » de retour. Une fonction constructeur peut renvoyer n'importe quel objet. Par exemple. ceci est valide:

function Foo() { 
    return new Bar(); 
} 

var foo = new Foo(); // foo contains a "Bar object" 

Ceci peut devenir utile pour l'héritage ou si vous voulez par exemple. mettez en cache les instances et renvoyez la même instance pour les mêmes paramètres passés à la fonction.

+2

+1.Pour l'intérêt du PO, consultez ce lien: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Literals Il couvre * tous * les littéraux, y compris les objets. – Stephen

+0

Merci Felix, maintenant je suis devenu un meilleur google-er ;-), merci pour le lien aussi bien. –

+0

vraiment bonne info. @ Stephen, que signifie OP? est-ce un terme de stackoverflow? – Ravikiran

2

Lorsque vous définissez un objet en utilisant:

var foo = {}; 

Il est littéral. Cet objet est une instance instantanée de l'objet. Lorsque vous définissez un objet comme:

function Foo(){ 
    this.bar = function(){}; 
} 

Aucune instance n'est créée tant que vous n'avez pas créé de nouveau Foo().

Questions connexes