【问题标题】:How to prevent an object from being accessed JSJS如何防止对象被访问
【发布时间】:2021-11-18 17:42:53
【问题描述】:

我有一个程序,我希望阻止任何人访问String 对象或其任何原型,但我似乎找不到如何做到这一点。

尝试过Object.sealObject.freeze,它们显然都不起作用(因为它们不会阻止您访问已经存在的属性,所以对如何做到这一点感到有些迷茫。 尝试在互联网上查找,但半小时后,我得到的只是访问属性的不同方式以及添加新内容和锁定的 3 种方式,但有 0 种方式使其无法访问

我也试过delete,但那个是.....

【问题讨论】:

    标签: javascript string object


    【解决方案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)

    【讨论】:

    • 这对 String 有什么作用?我对阻止将密钥添加到字符串不感兴趣(如果我愿意,我可以像我说的那样冻结和密封它)。它是从 JS 预先内置的。我想让它无法访问。
    • 不要给字符串添加键,将字符串添加到以符号为键的全局对象中。 @MSS2001
    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多