2011-01-11 5 views
-1

Hier ist ein Codebeispiel:Warum nicht die Instanzvariable nimmt den neuen Wert

var testObject = 
{ 
    val1: 1, 

    testing: function() 
    { 
     val1 = 2; 
     alert(val1); 
    } 
}; 

, wie wenn ein Alarm druckt val1 kommen, es sagt nicht definiert? Kein

+0

'val1' sollte" 2 "anzeigen. Versuchen Sie, ein Beispiel zu erstellen, das das Problem unter http://jsfiddle.net/ reproduziert. –

+0

nvm, es funktioniert, danke. – dave

Antwort

5

, tut es nicht http://jsfiddle.net/qmLMV/

Beachten Sie, dass val1: 1 eine Eigenschaft ist, und die val1 = 2; im Funktionskörper ist eine Variable. Wie bei allen Variablen wird es eine Identifikatorauflösung erfahren. In diesem Fall erstellen Sie eine implizite globale Variable, die vermieden werden sollte. Deklariere deine Variablen vorher.

function() { 
    var val1 = 2; 
} 

Auch diese beachten Sie:

var testObject = { 
    val1: 1, 
    testing: function() { 
     var val1 = 2; 

     alert(val1); // alerts 2 
     alert(this.val1); // alerts 1 
    } 
}; 

Verwenden this die Eigenschaften des Objekts zuzugreifen innerhalb dieser Methode des Objekts.

+0

ok es funktioniert, nvm. Vielen Dank. – dave

+1

@dave, hoffentlich werden Sie die Antwort vollständig überprüfen, da es darauf hinweist, dass Sie versuchen, die 'val1'-Eigenschaft von 'testObject' zu referenzieren, stattdessen verweisen Sie auf eine implizite globale' val1'-Variable. Dies kann viele Probleme verursachen, wenn Sie später versuchen, direkt auf die Eigenschaft zuzugreifen (es wird immer auf "1" gesetzt), und es kann Konflikte mit anderen Skripten verursachen, wenn sie aus irgendeinem Grund auf eine explizite globale "val1" zugreifen Variable. – eyelidlessness

Verwandte Themen