我有类似页面控制器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
那么。
答案 0 :(得分:0)
在
中拨打doSomething(this)
时
Tim.prototype.count = function(doSomething) {
doSomething(this)
}
doSomething
的上下文是全局的,其中this
为window
。
你知道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
...