@alekamisleforma

Как сделать переменную локальной при множественном вызове функции?

Написал слайдер и чтобы иметь возможность использовать его несколько раз на сайте, при этом не копирую весь код, вложил слайдер внутрь функции, которую собираюсь вызывать столько, сколько слайдеров на сайте мне потребуется. Однако, даже два слайдера уже работают некорректно. Листая один слайдер, листается и другой, т.к. внутри функции есть переменная.. и из-за того, что функцию я вызываю несколько раз, эта переменная становится не локальной в рамках одной функции, не у каждого слайдера своя, как задумывалось, а глобальной в рамках функций, которые были вызваны, т.е. одна переменная на несколько слайдеров. Как сделать, чтобы у каждого слайдера переменная была своя?

Пытаясь решить эту проблему, возникла мысль передавать НАЗВАНИЕ (не значение) переменной в параметры функции и при вызове функции у каждого слайдера эту переменную называть по своему, чтобы не пересекались. Но это так не работает, видимо. В переменную передается только значение переменной, но не ее название, да? Это можно как-нибудь обойти?
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 2
rockon404
@rockon404
Frontend Developer
Вам следует использовать классы или конструкторы, объявляя нужную переменную свойством экземпляра.

Пример с использованием класса:
class Slider {
  constructor() {
    this.myOwnProp = 'some value';
  }

  someMethod() {
    this.myOwnProp = 'some other value';
  }
}


Пример с использованием функции конструктора:
function Slider() {
  this.myOwnProp = 'some value';
}

Slider.prototype.someMethod = function() {
  this.myOwnProp = 'some other value';
}


Экземпляры следует создавать с использованием ключевого слова new.
Ответ написан
@alekamisleforma Автор вопроса
Всем большое спасибо за ответы, особенно Антону Спирину за развернутый. Но проблему удалось решить очень просто. В действительности, никакая переменная при вызове нескольких функций общей не делается, я просто не заметил, что в одном месте не передал класс родителя. На свежую голову разобрался)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы