2017-01-15 5 views
-3

Ich habe eine Funktion, die ein Objekt in Javascript zurückgibt. Die zurückgegebenen Objekte sind Instanzen eines "messagePack", das ich an den Server senden möchte. Jedes messagePack wird anders sein. Z.B .:Rückgabe eines Objekts aus einer Funktion in JavaScript

function someFunc() { 
     return { 
      name: "chatMessage", 
      time: Date.now(), 
      data: "yooo hoooo", 
      hash: hashFunc()    
     } 
    } 

ich dann erstellen eine Message erstellen und fügen Sie ihn in einem Array:

var messagePack = someFunc(); 

    msgArray.push(messagePack) 

Ist das ok? Soll ich eine Konstruktorfunktion für das Nachrichtenpaket erstellen und das neue Schlüsselwort verwenden? Ich habe das in einer ähnlichen Situation gesehen, aber ich kann nicht verstehen, warum das, was ich tue, nicht funktioniert.

+0

Hinweis: Hash wird nicht für die Sicherheit verwendet. –

+0

Besser, eine Konstruktorfunktion zu erstellen, so dass Sie für jede neue Instanz neue Namen und Daten definieren können – superUser

+0

Dies scheint eine Frage zu sein, die entweder völlig auf Meinung basiert oder überarbeitet werden könnte, um es zum Thema für den Code zu machen Überprüfen Sie Stackexchange. – Quentin

Antwort

-2

Dies ist ein Fabrikmuster, es ist vollkommen korrekt. Sie müssen keinen Konstruktor verwenden.

+1

Um dies zu verdeutlichen, erstelle ich hier jedes Mal ein "neues Objekt", wenn ich das Literalrecht zurückgebe? Es ist also kein Konstruktor erforderlich. –

+0

Das ist richtig, jeder Aufruf von someFunc() wird ein neues literales Objekt zurückgeben. Fabriken sind ein guter Weg zu arbeiten, es vermeidet die Verwendung von "this", die manchmal verwirrend sein kann. Douglas Crockford machte eine wirklich gute Rede über Javascript-Funktionen: https://www.youtube.com/watch?v=ya4UHuXNygM (um 1:00:00 deckt er Konstruktoren und Vererbung, aber die ganze Rede ist interessant) – Booster2ooo

+0

Cool Link, und Danke. –

0

Ein Konstruktor ist nützlich, wenn Sie mehrere Objekte mit denselben Daten haben, z. G. Funktionen oder Konstanten. Da Sie diese Wiederholungsdaten nicht haben (ich glaube), brauchen Sie sie nicht. Wenn Sie Daten wiederholen, können Sie dies tun:

var message_prot={ 
    name: "chatMessage", 
     time: Date.now(), 
     data: "yooo hoooo", 
     hash: false 
}; 

function somefunc(){ 
    a=Object.create(message_prot); 
    a.name="Hi"; 
    a.hash=hashfunc(); 
    return a; 
} 
+0

Afaik, das ist immer noch eine Fabrik, keine Konstruktorfunktion. Ein Konstruktor wird "this" ausnutzen, gibt kein Objekt zurück, sondern 'this' und muss mit' new' aufgerufen werden. – Booster2ooo

+0

@ Booster2ooo: aber technisch gesehen kein Unterschied zu einem Konstruktor (Ausgabe, internes Design) –

+0

in der Tat, deshalb der anwser zu deinem Freund --- Eine Ratte ist "nein", du kannst es tun, ohne einen "tatsächlichen" Konstruktor zu benutzen. – Booster2ooo

Verwandte Themen