Javascript: Was sind einige Richtlinien zur Definition neuer Datentypen?

9

Angenommen, Sie erstellen den Datentyp und legen sein Verhalten offen.

Können Sie einige Beispiele dafür geben, wann Sie verwenden würden:

  • eine Funktion & amp; neu:

    %Vor%
  • ein Objektliteral & amp; Object.create:

    %Vor%
  • eine Funktion, die Ihr Objekt aufbaut:

    %Vor%

Ich denke, dies könnte als doppelt für: new vs Object.create gekennzeichnet werden, aber mein Hauptinteresse besteht nicht darin zu diskutieren, welcher besser ist, sondern eher zu wissen, ob es bestimmte Anwendungsfälle gibt, in denen man den anderen vorgezogen werden sollte.

Ich habe viele Beiträge zu verwandten Fragen und das Buch von Crockford gelesen: Javascript: die guten Teile. Bisher bin ich zu dem Schluss gekommen, dass es eine Frage der Präferenz ist, dass der Ratschlag von Crockford mir sehr zu Herzen geht: "Versuche die gefährlichen und unnötigen Features zu vermeiden" ... Ich spreche von new .

    
pgpb.padilla 07.04.2013, 00:52
quelle

1 Antwort

8

Ich fange mit der Art an, wie ich Klassen normalerweise definiere:

%Vor%

Ich gebe Variablen im Konstruktor zu, weil F.prototype = { a : [1,2,3]; } problematisch ist, das Array wird zwischen Instanzen geteilt, es sei denn, die Eigenschaft wird im Konstruktor neu initialisiert (problematisch für alle nicht-primitiven Typen). Und es wird auch benötigt, wenn die Eigenschaft irgendwie von den Argumenten des Konstruktors abhängt. Ich deklariere Methoden im Prototyp, so dass sie zwischen allen Instanzen geteilt werden. Wenn du Vererbung verwendest, bedeutet das, dass du Superaufrufe haben kannst. Dies führt auch zu weniger Speicherauslastung, da die Methode nur einmal zugewiesen werden muss. t ein großes Problem).

Ich habe nie Object.create benutzt, ich sehe keinen Grund, das zu tun, außer du bist in eine wahnsinnige dynamische Hackerei verwickelt.

Ich benutze Objektliterale immer dann, wenn es unnötig erscheint, eine separate Klasse für die Objekte zu erstellen, zum Beispiel wenn es sich um Argumente für eine Methode handelt (also müssen Aufrufer nicht explizit etwas instanziieren), oder wenn es sich um interne Werte handelt. t von jemand anderem zugegriffen werden.

Ihre Factory entspricht im Wesentlichen dem Objektliteral. Ich denke, es kann nützlich sein, wenn Sie eine jonesque Struktur erstellen und einige Standardwerte setzen müssen.

Ich sehe nicht, warum new gefährlich oder unnötig wäre, in welchem ​​Kontext hat er das gesagt?

Aber ich denke, es kommt viel auf Geschmack an. Sei konsistent und verkompliziere die Dinge nicht.

    
Adam Bergmark 07.04.2013 05:47
quelle

Tags und Links