代码之家  ›  专栏  ›  技术社区  ›  S Meaden

在Javascript中,对象是否可以具有不区分大小写的成员访问权限?

  •  0
  • S Meaden  · 技术社区  · 5 年前

    我想要一个Javascript类,它的expando功能与普通对象非常相似,但具有不区分大小写的访问。所以

    var foo = new MyObject();
    foo.Bar = "Baz";
    alert (foo.bAR) ;   // I want this not to error but to be forgiving and print Baz
    

    Javascript不是我的主要开发语言,所以我对该语言的本质并不熟悉。有没有一种奇特的使用原型的方法?

    抱歉,我还坚持使用旧版本的Javascript(dunno肯定可能是版本3)

    3 回复  |  直到 5 年前
        1
  •  4
  •   Nina Scholz    5 年前

    您可以使用一个代理,并直接用键的小写值来寻址属性。

    var foo = {},
        proxy = new Proxy(foo, {
            get: function(obj, prop) {
                return obj[prop.toLowerCase()];
            },
            set: function(obj, prop, value) {
                obj[prop.toLowerCase()] = value;
            }
        });
    
    proxy.Bar = "Baz";
    
    console.log(proxy.bAR);
        2
  •  4
  •   Get Off My Lawn    5 年前

    Proxy .

    class MyObject {
      constructor() {
        // Some property that we want to use
        this.bar = 'abc'
    
        // Return a new proxy
        return new Proxy(this, {
          get: (target, prop) => target[prop.toLowerCase()],
          set: (target, prop, value) => (target[prop.toLowerCase()] = value)
        })
      }
    }
    
    var foo = new MyObject()
    foo.Bar = "Baz"
    console.log(foo.bAR)