Доступ к внутренней функции в массиве функций - PullRequest
1 голос
/ 07 апреля 2019

У меня есть следующий код, это переменная, которая имеет массив функций, но я не могу получить к ним доступ, отправить ошибку. Что мне нужно между ними, так это помощь, но при попытке получить доступ к одному из них в другом, выдается ошибка.

var mivarobject = function(){
  this.helpers = {
    function1: function(){
      return 1;
    },
    function2: function(){
      return this.helpers.function1() + 1;
    },
  };
};

console.log((new mivarobject()).helpers.function2());

Как я могу получить доступ между ними?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Либо используйте bind, либо используйте функцию стрелки:

var mivarobject = function() {
  this.helpers = {
    function1: function() {
      return 1;
    },
    function2: function() {
      return this.helpers.function1() + 1;
    }.bind(this),
  };
};

console.log((new mivarobject()).helpers.function2());

var mivarobject = function() {
  this.helpers = {
    function1: function() {
      return 1;
    },
    function2: () => this.helpers.function1() + 1,
  };
};

console.log((new mivarobject()).helpers.function2());
1 голос
/ 07 апреля 2019

Если вы вызываете function2 как метод helpers, его значение this устанавливается на helpers. Если function2 хочет вызвать другой метод helpers, он может быть достигнут как свойство this. По существу, ссылка на this.helpers является излишней и неправильной.

Измените определение функции2 на

function2: function(){
  return this.function1() + 1;
}

и все будет работать как положено.

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