Entender la diferencia entre Objeto.create () y new someFunction()
Recientemente me topé con el método Object.create()
en JavaScript, y estoy tratando de deducir cómo es diferente de crear una nueva instancia de un objeto con new SomeFunction()
, y cuándo querría usar uno sobre el otro.
Considere el siguiente ejemplo:
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
Observe que el mismo comportamiento se observa en ambos casos. Me parece que las principales diferencias entre estos dos escenarios son:
- El objeto utilizado en
Object.create()
en realidad forma el prototipo del nuevo objeto, mientras que en elnew Function()
de las propiedades/funciones declaradas no forman el prototipo. - No puede crear cierres con la sintaxis
Object.create()
como lo haría con la sintaxis funcional. Esto es lógico dado el ámbito de tipo léxico (vs bloque) de JavaScript.
¿Son correctas las afirmaciones anteriores? Y me estoy perdiendo algo? ¿Cuándo usarías uno sobre el otro?
EDITAR: enlace a la versión jsfiddle del ejemplo de código anterior: http://jsfiddle.net/rZfYL /
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52