私はページコントローラPage
のようなものを持っていますが、モデルTim
を使用し、Page
コントローラからコールバックします。Javascript: 'this'を関数パラメータとして渡した場合、オブジェクトフィールドは未定義です
ここで何が起こっているのか教えてください。
のコードは以下のようになります。それはundefined
ない場合であるので、
//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 2回を割り当てる必要があります。
はどこ 'tim'が宣言されていますか? –
timとは何ですか?「プリント機能」の結果は何ですか? –
'tim'を共有するべきです。 – baao