0

重複の可能性:
ネストされた関数パラメーターとJavascriptの「this」コンテキスト

ネストされたクラス関数呼び出しで「this」を使用する際に問題が発生したため、現在、JSクラスを希望どおりに設計するのに問題があります。それをよりよく説明する方法がわからないので、ここに私が意味するサンプルがあります。

test.html

<!DOCTYPE html>
<html class="main" lang="en">
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="test.js"></script>
    <script type="text/javascript">
        function doIt() {
            var myTestClass = new TestClass();
        }
    </script>
</head>
<body>
    <button onclick="doIt();">Do it!</button>
</body>
</html>

test.js

function TestClass() {
   // this is working
   this.alertValue('This works');

   // this is not working
   setTimeout(function(){this.alertValue('This does not work!')}, 1000);
}

TestClass.prototype.alertValue = function(value) {
   alert('Value is: ' + value);
}

もちろん、これは私が意味する問題を示すための単純化された例にすぎません。では、setTimeout呼び出し内の関数内で「this」識別子をどのように使用できますか、またはそれを達成するためのより良い/正しい方法はどのようになりますか?

よろしくお願いします!乾杯

4

1 に答える 1

5

thisの値を変数( )に保存するselfと、内でアクセスできますsetTimeout

function TestClass() {
   this.alertValue('This works');
   var self = this;
   setTimeout(function() { 
     self.alertValue('This does not work!')
   }, 1000);
}
于 2012-08-22T11:24:05.327 に答える