Как предотвратить доступ к объекту JS

#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