nepster-web
@nepster-web

Почему JavaScript работает с переменными как ссылками?

Пишу свой плагин (обертка для FormData) и наткнулся на такой интересный момент, который портит мне определенную ситуацию.

К примеру если мы цепляемся к форме по id, то никакх проблем нет. А вот если у нас на странице несколько форм и нужно повесить плагин по классу возникает проблема.

Кусок реализации, который демонстрирует проблему:
https://jsfiddle.net/034nuojn/

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

$form.data('formApi', {
    targetForm: $form,
    settings: settings,
    ...
});


НО, прежде чем записать эти данные, я делаю определенную манипуляцию с ними. И при этом присваиваю значение в переменную:

var validateFields = settings.validateFields || [];
//Происходят манипуляции с validateFields


И вот штука такая, что при следующей итерации цикла изменения задействованы не в переменной validateFields, а в settings.validateFields. Такое ощущение, что js делает каждую переменную ссылкой.

Как можно этого избежать?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
Массив в javascript является объектом, копирование идет по ссылке.
Попробуйте склонировать массив.
var validateFields = settings.validateFields ? settings.validateFields.slice() : [];
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Alastor
Не очень понимаю проблему, но может использовать this. перед названием переменной?

this.validateFields
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
20 апр. 2024, в 09:15
8000 руб./за проект
20 апр. 2024, в 08:39
100000 руб./за проект
20 апр. 2024, в 08:24
1500 руб./за проект