2016-05-24 22 views
0

私の問題はタイトルほどシンプルです。私はAJAX呼び出しを行うコードをいくつか持っています。このコードは、(JSFiddle)これと同様である。この場合'this'は次のスコープでは定義されていません

function Test() { 
    this.name = "U don't wanna know my name.."; 
} 
Test.prototype.ajax = function() { 
    $.ajax("url/path", data, function() { 
     alert(this.name); 
    }); 
}; 

var test = new Test(); 
test.ajax(); 
this

は未定義です。私は、AJAX呼び出しの前に次のコードを配置し、thisの代わりにそれを使用することができます。

var diz = this; 

それのための新しい変数を作成せずにthisを使用して別の方法があります場合、私は思っていました。

+1

通常、人々は 'var = this 'や' var _this = this'や 'var self = this'をします。もっと詳しい情報http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside-a-callback – nada

答えて

1

この場合、これは定義されていません。これは関数のコンテキストに固有のものですので、

this.nameが定義されていない、(あなたがいることを意味と仮定した場合)。そのAjaxのコールバックハンドラthisTestに属しません。そのコールバック関数に属しています。

これに新しい変数 を作成せずにこれを使用する別の方法があるかどうか疑問に思っていました。

私は親のthis(テストのthis)への参照を保存せずに、関数の範囲から、よりグローバルスコープに属しthisにアクセスできるとは思いません。

+0

私が '_this'の' name'を変更した場合、これを実行した後: 'var _this = this;'、 'this'の名前も変更されますか?または '_this'の名前だけ? –

+1

あなたは 'this'を変更することはできません – gurvinder372

+0

私はすでに自分でそれを発見しました..しかし、とにかく感謝:) –

関連する問題