Как выставить только функцию, а не переменные из функции класса? - PullRequest
0 голосов
/ 12 апреля 2019

Предположим, у меня есть этот код:

function GraphFactory() {

  this.nodeNames = [];
  this.pinnedNodes = [];


  this.initPinnedNodes = function(nodes) {
    if (nodes) {
      this.pinnedNodes = nodes;
    } else {
      this.pinnedNodes = [];
    }
  }
  this.checkIfPinned = function(node) {
    if (this.pinnedNodes.indexOf(node) > -1) {
      return true;
    } else {
      return false;
    }
  }
  this.addToPinnedNodes = function(name) {
    this.pinnedNodes.push(name);
    return true;
  }
  this.removeFromPinnedNodes = function(name) {
    this.pinnedNodes.splice(this.pinnedNodes.indexOf(name), 1);
    return true;
  }
}

let graphFactory = new GraphFactory();

Прямо сейчас я могу получить доступ к обеим функциям

graphFactory.checkIfPinned(label);

но также и непосредственно переменная

graphFactory.pinnedNodes

Как бы я настроил так, чтобы к функциям можно было получить доступ только к функциям, а не к переменным?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Используйте переменные вместо свойств объекта.

let nodeNames = [];

Они будут закрыты вашими динамически назначенными методами экземпляра.

Или см. этот вопрос для современного подхода.

0 голосов
/ 12 апреля 2019

С текущей конструкцией вы можете использовать замыкание для объекта, практически локальную переменную в функции конструктора:

function GraphFactory() {
  var nodeNames = [];
  var pinnedNodes = [];

  this.initPinnedNodes = function(nodes) {
    if (nodes) {
      pinnedNodes = nodes;
    } else {
      pinnedNodes = [];
    }
  }
  this.checkIfPinned = function(node) {
    if (pinnedNodes.indexOf(node) > -1) {
      return true;
    } else {
      return false;
    }
  }
  this.addToPinnedNodes = function(name) {
    pinnedNodes.push(name);
    return true;
  }
  this.removeFromPinnedNodes = function(name) {
    pinnedNodes.splice(this.pinnedNodes.indexOf(name), 1);
    return true;
  }
}

let graphFactory = new GraphFactory();

Однако такие переменные не будут доступны для методов, которые вы добавите позже, извне. Например, nodeNames существует напрасно таким образом.

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