Я пытаюсь создать не одноэлементный объект в NodeJS, но при вызове внутренних методов экземпляра внутри объекта они "неопределены".
// We auto-refresh the cached data every 'refreshInterval' milliseconds
var refreshInterval = 30*1000;
var refreshTimer = null;
// We stop refreshing 'idleTimeout' milliseconds after the last request for our data
var idleTimeout = 5 * 60 * 1000; // 5 minutes
var idleTimer = null;
var cachedData = null;
var queryCallback = null;
function Cache(options) {
if (options) {
this.refreshInterval = options.refreshInterval || 30;
this.queryCallback = options.queryCallback || null;
this.idleTimeout = options.idleTimeout || 5 * 60 * 1000;
}
}
Cache.prototype.data = function(callback) {
updateIdle();
if (cachedData) {
callback(cachedData);
} else {
queryData(function(newdata) {
callback(newdata);
});
}
}
Cache.prototype.updateIdle = function() {
idleTimer && clearTimeout(idleTimer);
idleTimer = setTimeout(haltRefresh, idleTimeout);
wslog.info(`Will cease cache refresh at ${new Date(Date.now() + idleTimeout)} if no new activity`);
}
// ...
module.exports = Cache;
Когда я создаю объект
var Cache = require('./cache.js');
var myCache = Cache(opts);
Это работает, но когда я вызываю myCache.data()
, вызов внутреннего метода updateIdle()
останавливает приложение, потому что ReferenceError: updateIdle не определен
Что-то говорит Ни один из моих методов экземпляра не будет «определен», хотя он явно таков. И до того, как я сделал их prototype
методами, они работали нормально. Это будут действительные Java вызовы метода экземпляра - есть ли какая-то проблема с областью действия JS?
Должен ли я удалить Cache.prototype.
из функций, которые мне не нужны, и затем просто использовать их? Нужно ли добавлять this.
к любым вызовам методов экземпляра?
Что мне нужно знать, чтобы JS "просто работал", как обычно OOP?