Fondamentalement Dans le premier exemple, vous déclarez un object literal qui est déjà une instance d'objet.
Dans votre deuxième exemple, vous définissez une fonction de constructeur qui peut être utilisée avec l'opérateur new
pour créer des instances d'objet.
Les littéraux d'objet peuvent également être utilisés pour créer de nouvelles instances d'objets et faire un héritage prototypique, Douglas Crockford promeut également cette technique.
Fondamentalement, vous pouvez avoir un opérateur object
:
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
Cette fonction d'aide peut être utilisé d'une manière très intuitive et pratique.
Il reçoit essentiellement un objet en tant que paramètre, dans la fonction d'une instance nouvel objet est créé, l'ancien objet est enchaînée au prototype du nouvel objet, et son retour.
Il peut être utilisé comme ceci:
var oldObject = {
firstMethod: function() { alert('first'); },
secondMethod: function() { alert('second'); },
};
var newObject = object(oldObject);
newObject.thirdMethod = function() { alert('third'); };
var otherObject = object(newObject);
otherObject.firstMethod();
Vous pouvez aller plus loin que vous le souhaitez, faire de nouvelles instances des objets précédemment définis.
Recommandé:
C'est aussi une bonne question pour moi, merci pour l'affichage. –
En ce qui concerne votre question dans l'édition, cela dépend de ce que vous voulez faire. Si vous avez seulement une copie de l'objet, optez pour la première syntaxe. Si vous voulez créer plusieurs copies (comme si 'Something' était un' Class' dans d'autres langages), optez pour la seconde syntaxe (ou en fait une version éditée dans laquelle vous définissez 'sayHi' dans le constructeur en utilisant' this.sayHi = function() {...} ', c'est la norme). –