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

在Javascript中,对象是否可以具有不区分大小写的成员访问权限?,javascript,Javascript,我想要一个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不是我的主要开发语言,所以我不熟悉这种语言的本质。是否有一种使用原型的奇特方式 很抱歉,我应该提到的旧版本的Java

我想要一个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也被卡住了(不知道可能是第3版)

您可以使用

在代理中,我们将搜索的键转换为小写,将对象键转换为小写,并在目标中查找属性

类MyObject{
构造函数(){
//我们想要使用的一些属性
this.bar='abc'
//返回一个新的代理
返回新代理(此{
get:(target,prop)=>target[prop.toLowerCase()],
set:(target,prop,value)=>(target[prop.toLowerCase()]=value)
})
}
}
var foo=新的MyObject()
foo.Bar=“Baz”

console.log(foo.bAR)
您可以使用代理并直接使用键的小写值来寻址属性

var foo={},
代理=新代理(foo{
获取:功能(对象、道具){
返回obj[prop.toLowerCase()];
},
设置:功能(对象、属性、值){
obj[prop.toLowerCase()]=值;
}
});
proxy.Bar=“Baz”;

console.log(proxy.bAR)不执行此操作的可能重复项。停止提供允许草率开发的机制。密钥区分大小写。如果您允许其他人使用不同大小写的密钥,那么您就允许他们创建难以维护的蹩脚代码,更不用说速度较慢,因为您必须运行特殊代码以允许密钥在不应该匹配的情况下匹配。相关:,Proxy提供了什么版本的javascript?它随ES6.ES6提供。是否有任何代码可以使代理与旧版本的javascript一起工作?(这就是他们所说的“填充物”吗?)你可以用一个很棒的!一个可能的情况是:
set
部分可能过于复杂:它总是以向未定义的prop:MyObject{undefined:'Baz1'}添加值而告终。可能只是使用一个更简单的方法:
return target[prop.toLowerCase()]=value
感谢您的想法,我已经更改了它。