web-dev-qa-db-ja.com

javascript、約束、thenスコープ内で変数thisにアクセスする方法

。thenスコープ内で関数を呼び出せるようにしたいので、そのためにthis.foo()を使用します。しかし、。then内でこれを行うと、thisが失われたように見えるため、エラーが発生します。私に何ができる?

このコードでは、これはオブジェクトに対して同じ出力を持つことに相当しますthis

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)
})
34
GWorking

2番目のコード例は、正しい方法です。新しい関数ではスコープが変更されるため、thisも変更されるため、関数の外部でthisへの参照を作成する権利があります。

失敗した理由は、関数が、外部で定義したグローバルaではなく、関数に渡したaを使用しているためです。

言い換えると:

var a = this;
one().then(function () {
  console.log(a)
});
46
Andy