Я ищу, как достичь переменных внутри конструктора, не используя ключевое слово "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;
}
Это не работает. Как я могу достичь коллекции и индекса внутри конструктора? Заранее спасибо.
Если я поставил это перед переменными, все будет хорошо.
В этом случае вы добавляете свойства к объекту очереди. Все, что имеет ссылку на этот объект, также сможет перейти к его свойствам
Однако, если я удалю это ключевое слово, я не могу достичь коллекции и индекса при создании объекта.
В этом случае вы создаете локальные переменные. Они будут доступны только для текущей функции, а также для любых вложенных функций.
Есть ли способ достичь этих переменных?
Только внутри конструктора и любых вложенных функций. По вложенным функциям я имею в виду, что вы могли бы сделать это, если хотите:
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
this
требуется для привязки атрибутов к функции, чтобы они были доступны в любом прототипе, созданном вами с помощью функции. переменные, объявленные с помощьюlet
, не привязаны к функции, они являются только локальными для нее.let
,var
,const
) значение переменной не присваивается какой-либо «внешней» переменной (this
, переменной из внешней области видимости или глобальной переменной), оно будет потеряно после блока appriate (или функции в случае переменнойvar
) закончен. Но какова твоя цель? Зачем тебе это вообще нужно? Давайте работать на саму цель!