我正在尝试创建一个对象
,当我搜索属性时,可以不区分大小写地执行该属性的“查找”操作。
var x = new CaseInsensitiveObject();
x.firstProperty = "Hello!";
alert(x.firstproperty); //alerts Hello!
我曾尝试使用
Object.defineProperty()
来实现这一点,但是它需要将属性的字符串文字作为参数传递(如果你考虑一下,Object.defineProperties()
也会有同样的问题)。是否有一种方法可以通用地设置对象所有属性的
getter
而无需提供键名?例如:Object.defineAllProperties(obj, {
get: function(prop)
{
if(!prop.toLowerCase && prop.toString)
prop = prop.toString();
if(prop.toLowerCase)
prop = prop.toLowerCase();
return this[prop];
}
});
如果不是全部属性,我该如何将一个Object的任意一个属性设置为不区分大小写?!
注意:
我知道扩展Object.prototype通常不是好习惯,但我有我的理由。由于一些数据库的更改,我需要快速修复。最终的修复需要花费几天时间,而在此期间我需要可运行的软件供QA测试。这个prototype方法将使所有事情都能正常工作,直到我完成所有必要的更改,并且这种方法不会被用于任何生产环境。因此,如果您打算反对并责骂我甚至考虑这么做,我是不会听的。
谢谢大家!
Proxy
对象的环境中使用Proxy
对象。 - apsillersProxy
可以工作,但不幸的是它是ECMA6。不能使用它。 - WebWanderer