0

重複の可能性:
オブジェクトプロトタイプメソッド内のsetInterval/setTimeout内で「this」を参照する

2番目のアラートボックスは「未定義」と言っていますか?どうしてこれなの?

<a id = "clickme">Click Me!</a>
<script>
var a = document.getElementById("clickme");
a.onclick = function(); {
    alert(this.innerHTML);
    setTimeout( function() {
        alert( this.innerHTML );
    }, 1000);
};
</script>
4

2 に答える 2

3

functionに渡しているのは、もう要素setTimeoutthisはないからです。オブジェクト(ブラウザランド)または厳密モードaのいずれかになります。globalwindowundefined

this代わりに、 ;への参照を格納します。

var a = document.getElementById("clickme");
a.onclick = function(); {
    var that = this;

    alert(this.innerHTML);
    setTimeout( function() {
        alert( that.innerHTML );
    }, 1000);
};
于 2012-12-06T02:01:20.397 に答える
1

https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout#The_.22this.22_problem

thissetTimeoutハンドラー内で異なる値を持っています。

于 2012-12-06T02:02:38.133 に答える