一つthis
は関数を呼び出す方法に依存していることです。それは、スタンドアロンの機能であるかのように
setInterval
あなたupdate
メソッドを呼び出しますし、そうthis
はグローバルオブジェクトに設定されます。
あなたが本当にthis
機能を使用する必要がある場合は、次のように、のsetIntervalににお電話を書き換える:
function Net() {
var self = this;
this.connection = -1;
this.counter = 1;
this.timelastsend = -1;
setInterval(function() { self.update() }, 3000);
}
この方法で、あなたのオブジェクトを参照し続けますself
変数を作成します(場合new
演算子を使用して作成しました。これは避ける別の理由です。this
)。
補遺: あなたが積極的にあなたのネット疑似クラスからオブジェクトの多くを下降していない場合は、次のように、私は事をリファクタリングしたい:
function createNet() {
var connection = -1,
counter = -1,
timelastsent = -1,
self,
update;
update = function() {
var now;
if (connection > 0 && timelastsent > 0) {
now = new Date().valueOf();
if (now - timelastsent > 1000 * 60) {
// ... update code ...
counter += 1;
timelastsent = now;
}
}
};
setInterval(update, 3000);
return {
update: update,
getTimeLastSent: function() { return timelastsent; },
getCounter: function() { return counter; },
getConnection: function() { return connection; }
};
}
あなたはなしあり気づくでしょうどこでも曖昧さがないことを意味するthis
の言及。私は、接続、カウンタ、およびタイムスタンプのプロパティのための3つのゲッターを含んでいますが、それらをオブジェクトの外側から書き込み可能にしたい場合は、それらを作成したオブジェクトに簡単に追加することもできます。
this.timelastsendも未定義に解決されますか? – user535617
どのように更新機能を呼び出していますか? – kjy112
Netオブジェクトをインスタンス化する方法と、更新関数をどのように呼び出すのですか?これが正しく行われているかどうか分かりますが、それはうまくいくはずです。 – Christian