。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)
})
2番目のコード例は、正しい方法です。新しい関数ではスコープが変更されるため、this
も変更されるため、関数の外部でthis
への参照を作成する権利があります。
失敗した理由は、関数が、外部で定義したグローバルa
ではなく、関数に渡したa
を使用しているためです。
言い換えると:
var a = this;
one().then(function () {
console.log(a)
});