如何使用对象的属性来设置具有回调函数的另一个属性

时间:2017-01-20 04:10:57

标签: javascript oop methods callback

认为这与其他许多与thisbind有关的问题不同。值得注意的是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
    })
  }

2 个答案:

答案 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.
    })
  }