Javascript:如果传递的对象字段是未定义的,那么这个'作为功​​能参数

时间:2016-12-28 13:52:47

标签: javascript jquery ajax

我有类似页面控制器Page的东西,我想使用模型Tim并从Page控制器回调另一个方法。

你能解释一下这里发生了什么吗?

代码如下所示:

//the model:
var Tim = function(){};
Tim.prototype.setDuration = function (duration) {
    this._duration = duration;
};
Tim.prototype.count = function(doSomething) {
    doSomething(this)
}

//the Page controller:
var Page = function(tim){
    this.tim = tim; // initialisation of this.tim
};
Page.prototype.init = function () {
    this.tim.count(this.pollStatus);
};
Page.prototype.pollStatus = function(tim) {
    this.tim = tim; // I still have to assign this.tim for the second time
    $.ajax({
          url: 'http://end/point',
          type: "GET",
          success: function (data) {
               this.tim.setDuration(data.duration); 
          }.bind(this)
     });
}
$(document).ready(function () {
     var tim = new Tim();
     var page = new Page(tim);
     page.init();
 })

我必须分配this.tim两次,因为如果不是undefined那么。

1 个答案:

答案 0 :(得分:0)

中拨打doSomething(this)
Tim.prototype.count = function(doSomething) {
    doSomething(this)
}

doSomething的上下文是全局的,其中thiswindow

你知道bind是什么,使用它:

Page.prototype.init = function () {
  this.tim.count(this.pollStatus.bind(this));
};

Page.prototype.pollStatus = function(tim) {
  //this.tim = tim; now the code works without this assignment
  ...