2016-04-10 9 views
1

Wie unten, ich eine Funktion DisplayMsg erstellen, die den Inhalt von "object1.msg" angezeigt wird, die nach Onload-Ereignis erstellt wird, aber es zeigt nicht definiert.Der Unterschied zwischen dem Erstellen von Objekt vor/nach window.onload

Aber wenn ich

setzen
var object1 = new testObject("Hello"); 

vor window.onload, egal vor/nach displayMsg() Funktion, es funktioniert.

Warum ist das? und was ist der Programmausführungsbefehl Unterschied zwischen diesen beiden? Dank ...

function testObject(msg) { 
    this.msg = msg; 
} 

function displayMsg() { 
    document.getElementById("msgbox").innerHTML = object1.msg; 
} 

window.onload = function() { 
    var object1 = new testObject("Hello"); 
    displayMsg(); 
} 

Antwort

0

Das onLoad-Ereignis wird ausgelöst, wenn die Seite oder das Element (Sie können onLoad mit DOM-Elementen verwenden) geladen und gerendert wird. Der restliche JavaScript-Code, der sich inline befindet, wurde zuvor gelesen und ausgeführt.

Was wahrscheinlich mit Ihnen geschieht, ist, dass Sie die Objektinstanzvariable innerhalb des onLoad-Callbacks definieren, wobei das "object1" außerhalb des Gültigkeitsbereichs liegt.

Sie können mit diesem versuchen:

var object1; // Variable is defined in the global scope 
 

 
function testObject(msg) { 
 
    this.msg = msg; 
 
} 
 

 
function displayMsg() { 
 
    document.getElementById("msgbox").innerHTML = object1.msg; 
 
} 
 

 
window.onload = function() { 
 
    object1 = new testObject("Hello"); 
 
    displayMsg(); 
 
}
<div id="msgbox"></div>

+0

Danke! Sehr klare Erklärung. –

1

Sie object1 innerhalb einer Funktion zu erklären, deshalb ist es in dieser Umfang der Funktion und kann nicht von einem anderen Umfang erreicht werden.

Try this:

function testObject(msg) { 
    this.msg = msg; 
} 

function displayMsg(object) { 
    document.getElementById("msgbox").innerHTML = object.msg; 
} 

window.onload = function() { 
    var object1 = new testObject("Hello"); 
    displayMsg(object); 
} 
+0

Wow! Das ist es! .... Ich kann nicht glauben, dass ich mehrere Stunden verschwende, wenn ich an diese Frage denke ... Danke! –

1

Sie Ihr object1 Objekt im Rahmen der window.onload Funktion zu schaffen. Das bedeutet, dass in Ihrer Displaymeldung kein Objekt1 vorhanden ist.

Sie können versuchen, das Objekt als Parameter an Ihre displayMsg() Funktion übergeben oder einfach Ihren gesamten Code in die Onload-Funktion zu migrieren.

EDIT

Sie Ihre Frage der Last, um awnser: Jedes Skript, das Sie, wie durch den Browser sobald seine geladen ausgeführt umfassen wird. Die Verwendung von window.onload verzögert den gesamten Code in dieser Funktion bis zu dem Punkt, an dem jedes einzelne Skript der Seite geladen wird. Beachten Sie auch, dass die Reihenfolge, in der Sie Skripte in Ihre HTML-Datei schreiben, ist egal,!

+0

Schön! Danke mein Freund. –

Verwandte Themen