Одной из проблем использования this
является то, что 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
).
Добавление: Если вы не активно по убыванию множество объектов с вашего Net pseudoclass, я бы реорганизовать вещь, как не следует:
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
в любом месте, что означает отсутствие двусмысленности. Я включил три получателя для свойств соединения, счетчика и timelastent, но если вы хотите, чтобы они были доступны для записи из-за пределов объекта, вы могли бы просто добавить их к созданному объекту.
делает это.timelastsend также получить разрешение на неопределенное? – user535617
как вы вызываете функцию обновления? – kjy112
Как вы создаете экземпляр объекта Net и как вы вызываете функцию обновления? Насколько я вижу, правильно ли это сделано, он должен работать. – Christian