Как сделать переменную приватной во Vue

Ответ

Во Vue нет настоящих приватных переменных, но есть несколько способов эмулировать приватность:

  1. Внутри компонента - просто не добавляй переменную в data() или setup(), а объяви её внутри функции:
methods: {
  someMethod() {
    const privateVar = 'secret' // доступна только в этой функции
  }
}
  1. Composition API - можно использовать замыкания:
setup() {
  const privateVar = ref('secret') // не возвращаем её
  return { /* только публичные данные */ }
}
  1. Символы (Symbol) - для "скрытия" свойств:
const PRIVATE_KEY = Symbol()
export default {
  data() {
    return {
      [PRIVATE_KEY]: 'secret' // технически доступна, но сложно найти
    }
  }
}

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

Ответ 18+ 🔞

А, ну это классика, блядь! Слушай, сейчас я тебе про приватность в Vue так расскажу, что ты офигеешь, как от хорошего анекдота.

Вот представь: ты такой, весь из себя, пишешь компонент, и думаешь: "Щас я тут переменную спрячу, чтоб никто, сука, не нашёл, как в банковском сейфе!". А Vue тебе такой: "Бро, у нас тут фронтенд, ёпта! Всё, что у клиента — всё его, нахуй!".

Но есть, конечно, приёмы, чтоб хотя бы соседа по коду не пускать куда не надо.

Первый способ — проще пареной репы. Не выноси сор из избы, блядь! Просто не клади переменную туда, где её все увидят:

methods: {
  someMethod() {
    const privateVar = 'secret' // Вот она, сука, сидит тут, как мышь в норке. Только в этой функции её и видели.
  }
}

Второй способ — для любителей Composition API. Тут можно сыграть в прятки с помощью замыканий, это как спрятать ключ под ковриком, но коврик прибить гвоздями:

setup() {
  const privateVar = ref('secret') // Сделал и не отдал!
  return { /* а наружу вынес только то, что не жалко */ }
}

Третий способ — для параноиков с изюминкой. Символы, блядь! Это как повесить на дверь табличку "Не входить, злая собака!", а собаки-то и нет.

const PRIVATE_KEY = Symbol() // Секретный ключ, который только ты знаешь
export default {
  data() {
    return {
      [PRIVATE_KEY]: 'secret' // Технически дверь открыта, но чтобы найти эту хуйню, надо знать, за какую ручку тянуть.
    }
  }
}

Но запомни главное, ёбта: это всё — театр для своих. Любой юзер с DevTools — это как тот самый Герасим с мешком: если захочет, то найдёт, достанет и утопит твою "приватность" в первой же вкладке Console. Всё это лишь чтобы коллега по проекту случайно не накосячил, а не от злоумышленника.

Короче, пиши код так, будто всё публичное, а эти фишки — просто намёки для других разработчиков: "Чувак, не лезь сюда, тут не для тебя, в рот меня чих-пых!".