441 Stimmen

Den Unterschied zwischen Object.create() und new SomeFunction() verstehen

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 der new 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/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X