#javascript #string #object
Вопрос:
У меня есть программа, в которой я хочу запретить кому-либо доступ String
к объекту или любому из его прототипов, и я, похоже, не могу найти, как это сделать.
Пробовал Object.seal
, Object.freeze
и оба они, очевидно, не работают (поскольку они не мешают вам получать доступ к уже существующим свойствам, поэтому я немного теряюсь в том, как это сделать. Попытался поискать его в Интернете, но через полчаса все, что у меня есть, — это другой способ доступа к свойствам и 3 способа добавления новых материалов и блокировки, но 0 способов сделать его недоступным
Я тоже пытался delete
, но этот был…..
Ответ №1:
Вы можете использовать символ в качестве ключа и хранить свой объект в этом объекте. Таким образом, он будет доступен только в том объеме, в котором вы определили символ.
function addPrivateKey(a, value) {
let sym1 = Symbol()
a[sym1] = value
console.log(a)
console.log(a[sym1])
}
let a = {};
addPrivateKey(a, 2)
console.log(Object.keys(a))
Определите частную область и храните там свои ключи. Значения доступны только с их подсказками!
class PrivateScope {
glob = {};
#keyToSym = {};
counter = 0;
get(hint) {
return this.glob[this.#keyToSym[hint]]
}
set(value) {
let sym1 = Symbol()
this.glob[sym1] = value
this.#keyToSym[this.counter] = sym1;
return this.counter ;
}
}
const myPrivateScope = new PrivateScope();
let hint = myPrivateScope.set(2)
console.log(
myPrivateScope.get(hint)
)
console.log(myPrivateScope.glob)
Комментарии:
1. Как это работает для String ? я не заинтересован в предотвращении добавления ключей в строку (если бы я хотел, я мог бы заморозить и запечатать ее, как я уже сказал). его предварительно встроили в него из JS. Я хочу сделать его недоступным.
2. Не добавляйте ключ в строку, добавьте строку в глобальный объект с символом в качестве ключа. @MSS2001