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
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы