Методы экземпляра не входят в область действия модуля JS в NodeJS? - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь создать не одноэлементный объект в 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...