JavaScript Символы не работают должным образом внутри объектов - PullRequest
0 голосов
/ 17 июня 2020

Я начал смотреть на символы в JavaScript и начал использовать их в своих объектах, чтобы помочь с конфликтами имен, но я все еще могу перезаписывать свойства при их использовании?

// Код первого разработчика

let id = Symbol('id');
let user = {
name: 'Karan',
[id]: 25,
}

Теперь я клонировал их код и использую его

Я все еще могу, user[id] = 45 // This will turn the id value to 45

Это то же самое, как если бы вы использовали обычную строку id вместо символа

(код первого разработчика)

let user = {
name: 'Karan',
'id' : 25,
}

Теперь я клонировал их код или скажите, что другой разработчик делает

user.id = 28;

Значение идентификатора изменено

1 Ответ

1 голос
/ 17 июня 2020

Идея в том, что вы сохраняете частный экземпляр Symbol. Это не помешает вам волшебным образом перезаписать свойства.

Один раздел вашего кода может создать символ:

let id = Symbol("id");

Затем они могут использовать этот символ как свойство объекта: `

let user = {
  [id]: 123,
};

Однако другой раздел вашего кода не сможет перезаписать свойства , если у них нет доступа к тому же экземпляру символа .

Например , если другой фрагмент кода создает свой собственный символ, свойство, которое они извлекают, будет undefined:

let id2 = Symbol("id");
console.log(user[id2]); // undefined

Вы должны изолировать этот экземпляр символа от остальной части кода.

Современный способ сделать это - поместить его в модуль ESM, а не export переменную.

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

...