Vor kurzem stieß ich auf die Object.create()
Methode in JavaScript und versuche herauszufinden, wie sie sich von der Erstellung einer neuen Instanz eines Objekts mit new SomeFunction()
und wann Sie das eine dem anderen vorziehen würden.
Betrachten Sie das folgende Beispiel:
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
Beachten Sie, dass in beiden Fällen das gleiche Verhalten zu beobachten ist. Mir scheint, dass die Hauptunterschiede zwischen diesen beiden Szenarien sind:
- Das Objekt, das in
Object.create()
tatsächlich den Prototyp des neuen Objekts bildet, während in dernew Function()
aus den deklarierten Eigenschaften/Funktionen bilden nicht den Prototyp. - Sie können keine Verschlüsse mit der Option
Object.create()
Syntax wie bei der funktionalen Syntax. Dies ist logisch, wenn man den lexikalischen (im Gegensatz zum blockweisen) Geltungsbereich von JavaScript bedenkt.
Sind die obigen Aussagen richtig? Und übersehe ich etwas? Wann würden Sie das eine dem anderen vorziehen?
EDIT: Link zur jsfiddle-Version des obigen Codebeispiels: http://jsfiddle.net/rZfYL/