2013-02-03 15 views
5

Was passiert, wenn Sie einer Variablen kein neues Objekt zuweisen? Zum Beispiel:Was passiert, wenn das neue Instanzobjekt keiner Variablen zugewiesen wird?

function MyConstructor() { 
    // Codes here 
}; 

new MyConstructor(); // new object instance is not assign to a variable 

Ist dieser Code gefährlich ist? Überwiegt es den globalen Namespace? Ist es möglich, auf das mit diesem Stil erstellte Objekt zuzugreifen?

Danke.

+0

Warum würden Sie ein Objekt erstellen und keine Referenz darauf erstellen? Ich denke nicht, dass es danach möglich ist, darauf zuzugreifen, es sei denn, Sie geben es von einer Funktion zurück. –

+0

Ist es "MyConstructor" oder ist es "Test"? – Bergi

+0

Hoppla Sorry ist MyConstructor nicht Test .. Danke Jungs für die Antwort .. :) – japt

Antwort

8
  • Ist dieser Code gefährlich? - Nein.
  • Überwiegt es den globalen Namespace? - Nein.
  • Ist es möglich, auf das mit diesem Stil erstellte Objekt zuzugreifen? - Nein.

Wie Sie richtig festgestellt, new MyConstructor() der Anruf wird ein neues Objekt zurückkehrt, wird der Verweis auf die es gerade nicht gespeichert bekommen und wird daher vom Garbage Collector sehr schnell gelöscht. Ihre einzige Chance, auf dieses neue Objekt zu handeln direkt

new MyConstructor().someMethod(); 

... danach, Sie haben Ihre Chance und der neue Objektverweis verloren in Äußerraum verloren :)

+0

+1 für den zweiten Teil. –

+3

'dies' im Konstruktor und dann woanders gespeichert würde funktionieren. –

+0

@LeeTaylor: Viele Dinge würden funktionieren, aber da das OP nirgendwo irgendwelche verrückten Konstrukte erwähnt, warum sollten wir solche annehmen? – jAndy

1

, weil es kein Hinweis darauf nach seiner Erstellung wird es bald Müll gesammelt.

Nur zur Info: Der Grund für die Erstellung von Objekten 80 bis 90% der Zeit ist, so dass sie später referenziert und verwendet werden können.

+2

'dies' im Konstruktor und dann woanders gespeichert würde funktionieren. –

4

Wenn der Konstruktor selbst keinen Verweis auf das Objekt außerhalb des Objekts speichert, gibt es keinen Verweis auf das Objekt, und der Garbage Collector wird es entfernen.

Der Code ist nicht gefährlich, er fügt dem globalen Namespace nichts hinzu, und es ist nicht möglich, das Objekt zu erreichen, es sei denn, der Konstruktor macht es möglich.

Ein Beispiel, wo es wäre verwendet werden könnte, wenn der Konstruktor das selbst Objekt registriert:

var myHandlers = {}; 

function Handler(name) { 
    myHandlers[name] = this; 
} 

new Handler("test"); 

Der Nachteil von so etwas wie, dass die Verwendung ist natürlich, dass es schwieriger ist, zu folgen, was passiert.

Verwandte Themen