2017-10-06 3 views
0

Ich bin wild verwirrt von Javascript Fähigkeit, Ereignisse in der falschen Reihenfolge zu behandeln. Unter Windows/Chrome wird der folgende Code ausgegeben, um das Objekt mit der bereits geänderten Klasse zu trösten, bevor es geändert wurde. Die Ausgabe der Klasse zeigt jedoch die unveränderte Klasse an. Kann jemand bitte erklären, welche Regel das regelt? Ich weiß nicht, wie ich in welchem ​​Zustand erwarten soll, meine Objekte zu sehen.Javascript funktioniert außer Betrieb

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 

 
<head> 
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <title>Table Schema</title> 
 
</head> 
 

 
<body> 
 
    <a href="#" class="first_class" onclick="checkClass(this)">I am supposed to be first_class!</a> 
 
    <script> 
 
    function checkClass(obj) { 
 
     console.log(obj); 
 
     console.log(obj.className); 
 
     if (obj.className == 'first_class') { 
 
     obj.className = 'second_class'; 
 
     } 
 
    } 
 
    </script> 
 
</body> 
 

 
</html> 
 
<html>

+0

sagt erste Klasse für mich mit der Zeichenfolge und einem Obj zeigen den aktuellen Wert nicht den Snapshot zu diesem Zeitpunkt. https://stackoverflow.com/questions/30150469/why-console-log-displays-incorrect-objects-values ​​ – epascarello

Antwort

0

Der Wert von obj ist ein reference to an object.

Der Wert obj.className ist eine Zeichenfolge, und dann ist es eine andere Zeichenfolge.

Some consoles are asyncronous. Wenn sie ein Objekt rendern, ändern sich die Daten im Objekt und Sie sehen die aktualisierten Daten.

Es gibt keine Möglichkeit, eine Zeichenkette zu ändern, Zeichenketten sind unveränderlich. Wenn Sie also eine Zeichenkette übergeben, spielt die Asynchronität keine Rolle.

Wenn Sie das aktualisierte Objekt nicht sehen möchten, lesen Sie this question.

+0

Dank @Quentin, das ist hilfreich. Ich werde prüfen, ob ich in meinem Anwendungsfall nur die Zeichenfolge übergeben kann. Gibt es eine Möglichkeit, Objekte zuverlässiger auszugeben? –

+0

@RobynWyrick - Siehe den letzten Satz der Antwort. – Quentin

+0

danke. Folgte dem Link und das sollte funktionieren. Ich muss Mikulas zustimmen, ich kann mir keine Situation vorstellen, in der dieses Verhalten der Konsole aus der Sicht eines Programmierers bevorzugt würde. –

Verwandte Themen