2015-09-13 3 views
22

の内側に、これを変数にアクセスするには、そのために私はthis.foo()方法を使用しています。しかし、の内部でこれを行うと、のようにエラーが発生します。このが失われているようです。私に何ができる?このコードでJavascriptを、約束は、どのように私は<em>.then</em>範囲内の関数を呼び出すことができるようにしたい、スコープ

、これはオブジェクトに対して同じ出力を持つに相当します。この

console.log(this) 
one().then(function() { 
    console.log(this) 
}) 

function one() { 
    var deferred = $q.defer(); 
    deferred.resolve() 
    return deferred.promise; 
} 

このどちらもない

console.log(this) 
var a = this; 
one().then(function(a) { 
    console.log(a) 
}) 
+2

あなたは '1()、その後(機能(A){'、それは '1(だように)から' A'引数を削除する場合は、(関数(){。それで、あなたの望む結果が得られるでしょう。 – Andy

+0

私はあなたの答えを見たときにそれをテストしていました。あなたはまったく正しいです!答えとして投稿すると答えとしてマークします。 – Gerard

答えて

30

あなたの2番目のコード例は、正しい方法であるが動作するようです行く。新しい機能でスコープが変更されるので、thisも変更されていますので、機能の外にthisへの参照を作成することは正しいです。

理由が失敗した理由は、関数が外部定義済みのグローバルaではなく関数に渡したaを使用しているからです。言い換えれば

:。

var a = this; 
one().then(function() { 
    console.log(a) 
}); 
+24

(9)の前にインターネットのexploderはディスクスペースの無駄であり、決して頼りにすべきではありません。静的なWebページを表示する以外は何もしないでください。 –

+2

ええ、@JaromandaX、私はj誰かが答えに行った編集を見て、コードが正しく見えなかった。あなたのものは正確に見えます。 – Andy

+2

あなたのものは正しいですし、多くの場合にはおそらく使いやすく、あなたは 'var a = this'をどこに置くのかを見て知っているのですが、bindを使うと、そのことを期待したい、または欲しい:p –

関連する問題