我认为这与其他许多与this
和bind
有关的问题不同。值得注意的是How to access the correct `this` context inside a callback?
我在一个使用该对象属性的对象上有一个方法,并进行ajax调用。我希望该值存储在新的属性对象中。我只是不确定如何将回调函数分配给属性。
构造
function congressMember(state, district) {
this.state = state
this.district = district
}
原型上的方法:
congressMember.prototype.getMember =
function() {
govTrack.findRole({ current: true, state: this.state, district: this.district }, function(err, res) {
if (!err) {
return res.objects[0].person // this won't work
}
})
}
然后我想制作一个新实例:var myHouseRep = new congressMember('WY', 1);
问题不在于this
,而是在#34}中获取值"回调。
尝试保持流程透明,这是第二次尝试:
function foo(state, district, fn) {
govTrack.findRole({ current: true, state: state, district: district }, function(err, res) {
if (!err) {
fn(res.objects[0].person)
} else {
console.log('error')
}
})
}
congressMember.prototype.getDetails =
function() {
_this = this
foo(this.state, this.district, function(cb) {
_this.details = cb
})
}
答案 0 :(得分:0)
您可以将变量定义为undefined,然后指定一个值。
var foo;
function bar(baz) {
this.baz = baz;
foo = this.baz;
}
bar(42)
console.log(foo) // 42
答案 1 :(得分:0)
我对这个问题的第二次尝试实际上解决了这个问题,我很困惑,因为在调用该方法之后我console.og
了。
function foo(state, district, fn) {
govTrack.findRole({ current: true, state: state, district: district }, function(err, res) {
if (!err) {
fn(res.objects[0].person)
} else {
console.log('error')
}
})
}
congressMember.prototype.getDetails =
function() {
_this = this
foo(this.state, this.district, function(cb) {
_this.details = cb
console.log(_this) // The object now has the returned value
// as a property.
})
}