Достижение переменных, которые не созданы с ключевым словом this в конструкторе в Javascript [duplicate]

1

Я ищу, как достичь переменных внутри конструктора, не используя ключевое слово "this". Если я поставил это перед переменными, все будет хорошо.

function MyQueue ()
    {
         this.collection = [];
         this.index = 0;
    }

MyQueue.prototype.isEmpty = function()
{
   return this.collection.length === 0; 
}

Однако, если я удалю это ключевое слово, я не могу достичь коллекции и индекса при создании объекта. Есть ли способ достичь этих переменных?

function MyQueue ()
{
     let collection = [];
     let index = 0;
}


MyQueue.prototype.isEmpty = function()
{
   return this.collection.length === 0; 
}

Это не работает. Как я могу достичь коллекции и индекса внутри конструктора? Заранее спасибо.

  • 0
    Я не уверен, возможно ли это, поскольку ключевое слово this требуется для привязки атрибутов к функции, чтобы они были доступны в любом прототипе, созданном вами с помощью функции. переменные, объявленные с помощью let , не привязаны к функции, они являются только локальными для нее.
  • 0
    нет, однажды (локально - например, let , var , const ) значение переменной не присваивается какой-либо «внешней» переменной ( this , переменной из внешней области видимости или глобальной переменной), оно будет потеряно после блока appriate (или функции в случае переменной var ) закончен. Но какова твоя цель? Зачем тебе это вообще нужно? Давайте работать на саму цель!
Показать ещё 4 комментария
Теги:

1 ответ

1
Лучший ответ

Если я поставил это перед переменными, все будет хорошо.

В этом случае вы добавляете свойства к объекту очереди. Все, что имеет ссылку на этот объект, также сможет перейти к его свойствам

Однако, если я удалю это ключевое слово, я не могу достичь коллекции и индекса при создании объекта.

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

Есть ли способ достичь этих переменных?

Только внутри конструктора и любых вложенных функций. По вложенным функциям я имею в виду, что вы могли бы сделать это, если хотите:

    function MyQueue () {
      let localVariable = 3;
      this.logLocalVariable = function() {
        console.log(localVariable);
      }
    }

    const queue = new MyQueue();
    queue.logLocalVariable(); // logs 3;
    console.log(queue.localVariable) // logs undefined
  • 0
    Спасибо @Nicholas Tower, сэр, действительно хорошее объяснение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню