Recentemente sono incappato nel metodo Object.create()
in JavaScript e sto cercando di dedurre come è diverso dalla creazione di una nuova istanza di un oggetto con new SomeFunction()
e quando si vorrebbe usare l'uno sull'altro.Comprendere la differenza tra Object.create() e new SomeFunction()
consideri il seguente esempio:
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
Si noti che lo stesso comportamento si osserva in entrambi i casi. Mi sembra che le principali differenze tra questi due scenari sono:
- L'oggetto utilizzato in
Object.create()
costituisce in realtà il prototipo del nuovo oggetto, mentre nelnew Function()
dalle proprietà dichiarate/funzioni non formano il prototipo. - Non è possibile creare chiusure con la sintassi
Object.create()
come con la sintassi funzionale. Questo è logico dato lo scope di tipo lessicale (vs block) di JavaScript.
Le precedenti istruzioni sono corrette? E mi manchi qualcosa? Quando useresti l'uno sull'altro?
EDIT: link alla versione jsfiddle di codice di esempio sopra: http://jsfiddle.net/rZfYL/
Vedere anche [Utilizzo di "Object.create" invece di "nuovo"] (http: // stackoverflow.com/q/2709612/1048572) – Bergi