Frage Vorteil der Verwendung von Object.create


Ähnlich, aber anders als diese Frage. Der folgende Code stammt von JavaScript: Der endgültige Leitfaden. Er definiert im Grunde eine Methode namens inherit, die auf Object.create verweist, falls sie existiert, ansonsten einfach alte JavaScript-Vererbung mithilfe von Konstruktoren und den Austausch von Prototypen herum.

Meine Frage ist, da Object.create nicht existiert viele gängige Browser IE, was ist der Sinn sogar zu versuchen, es zu benutzen? Es wird sicherlich der Code verstopft, und einer der Kommentatoren der vorherigen Frage erwähnt, dass Object.create ist nicht zu schnell.

Was ist also der Vorteil beim Versuch, zusätzlichen Code hinzuzufügen, um gelegentlich diese ECMA 5-Funktion zu verwenden, die möglicherweise langsamer als die "alte" Art und Weise ist, dies zu tun?

function inherit(p) {
   if (Object.create) // If Object.create() is defined...
      return Object.create(p); // then just use it.

   function f() {}; // Define a dummy constructor function.
   f.prototype = p; // Set its prototype property to p.
   return new f(); // Use f() to create an "heir" of p.
}

10
2017-09-21 19:31


Ursprung


Antworten:


Der Geschwindigkeitsunterschied ist nicht sehr auffällig, da Sie wahrscheinlich nicht zu viele Objekte erstellen werden (Hunderte, sogar Tausende ist nicht das, was ich oft nenne), und wenn Sie es sind und Geschwindigkeit ein entscheidendes Thema ist, haben Sie wahrscheinlich gewonnen ' t in JS zu kodieren, und wenn beide der oben genannten nicht wahr sind, dann bin ich mir sicher, dass innerhalb weniger Releases aller populären JS-Engines der Unterschied vernachlässigbar sein wird (dies ist bereits bei einigen der Fall).

Als Antwort auf Ihre Frage sind die Gründe nicht geschwindigkeitsabhängig, sondern weil die Design-Muster von Object.create ist für die alte Methode bevorzugt (aus den Gründen, die in dieser und anderen Antworten dargelegt sind). Sie ermöglichen die ordnungsgemäße Verwendung der ES5-Eigenschaftsattribute (die für skalierbarere Objekte und damit für besser skalierbare Anwendungen sorgen) und können bei Vererbungshierarchien hilfreich sein.

Es ist Vorwärtsentwicklung. Wenn wir die Zeile "Nun, es ist nicht überall umgesetzt, also lass uns unsere Füße nicht nass" machen, würden sich die Dinge sehr langsam bewegen. Im Gegenteil: Eine frühzeitige und ehrgeizige Einführung hilft der Branche, Fortschritte zu erzielen, hilft Entscheidungsträgern bei der Entscheidungsfindung, neue Technologien zu unterstützen, hilft Entwicklern, neue Ideen und unterstützende Rahmenbedingungen zu verbessern und zu perfektionieren. Ich bin ein Befürworter einer frühen (aber vorsorglichen und immer noch rückwärtskompatiblen) Adoption, da die Erfahrung zeigt, dass es viel zu lange warten kann, wenn man darauf wartet, dass genug Leute eine Technologie unterstützen. Möge IE6 eine Lektion für diejenigen sein, die anders denken.


9
2017-09-21 21:50