Je suis récemment tombé sur le Object.create()
en JavaScript, et j'essaie de déduire en quoi elle est différente de la création d'une nouvelle instance d'un objet avec la méthode new SomeFunction()
et quand vous voudrez utiliser l'un plutôt que l'autre.
Prenons l'exemple suivant :
var test = {
val: 1,
func: function() {
return this.val;
}
};
var testA = Object.create(test);
testA.val = 2;
console.log(test.func()); // 1
console.log(testA.func()); // 2
console.log('other test');
var otherTest = function() {
this.val = 1;
this.func = function() {
return this.val;
};
};
var otherTestA = new otherTest();
var otherTestB = new otherTest();
otherTestB.val = 2;
console.log(otherTestA.val); // 1
console.log(otherTestB.val); // 2
console.log(otherTestA.func()); // 1
console.log(otherTestB.func()); // 2
Remarquez que le même comportement est observé dans les deux cas. Il me semble que les principales différences entre ces deux scénarios sont :
- L'objet utilisé dans
Object.create()
forme en fait le prototype du nouvel objet, alors que dans la versionnew Function()
des propriétés/fonctions déclarées ne forment pas le prototype. - Vous ne pouvez pas créer de fermetures avec l'option
Object.create()
comme vous le feriez avec la syntaxe fonctionnelle. Ceci est logique étant donné l'étendue du type lexical (vs bloc) de JavaScript.
Les déclarations ci-dessus sont-elles correctes ? Et est-ce que quelque chose m'échappe ? Quand utiliseriez-vous l'un plutôt que l'autre ?
EDIT : lien vers la version jsfiddle de l'échantillon de code ci-dessus : http://jsfiddle.net/rZfYL/
3 votes
Voir aussi Utilisation d'Object.create au lieu de new
1 votes
Quelle est la différence entre
new Object()
et la notation littérale des objets ? est également liée, c'est-à-dire qu'il s'agit de comparer ce qui est nouveau, ce qui est créé et ce qui est juste.{}