Frage

ich dieses Stück Code, und es funktioniert nicht, wie ich erwarte, dass (es ist Demo-Code, von einem größeren Programm destilliert):

<!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>
<title>Test</title>

<script language="javascript" type="text/javascript">
var test = {
    variable: true,
    go: function() {
        alert(this.variable);
    }
};

function s() {
    test.go();
    setTimeout(test.go, 500);
}

</script>

</head>
<body>
<form action="#">
<input type="button" value="Go" onclick="s();" />
</form>
</body>
</html>

Wenn ich die Go-Taste klicken, sowohl im IE und FF (der einzige Browser Ich kümmere mich um atm), das erste Warnfeld zeigt „true“, die zweiten „undefiniert“.

Meine Fragen sind, warum, und wie kann ich es vermeiden?

War es hilfreich?

Lösung

setTimeout wird die übergebene Funktion im Rahmen des Fensters auszuführen, so ‚this‘ bezieht sich auf das Fenster. Versuchen Sie stattdessen:

setTimeout(function(){
    test.go();
}, 500);

Andere Tipps

die Zeile

setTimeout(test.go, 500);

mit

setTimeout(function(){test.go()}, 500);

und Ihr Skript shoud funktionieren.

Es sieht aus wie „this“ verweist auf etwas anderes, wenn Sie „gehen“ aus dem Timeout aufrufen. es weist wahrscheinlich auf Fenster.

versuchen, so etwas wie diese

var fn = function(){
    test.go.apply(test, []);
}
setTimetout(fn, 500);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top