我试图让一个Object
谁,当我搜索属性,执行该财产的“查找”不区分大小写。对象原型:不区分大小写消气上的所有属性
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测试。这个原型方法将使所有的工作都能够在我做出所有必要的改变的同时,这种方法不会被放入任何生产环境中。所以,如果你打算开枪打我,甚至想着这样做,我就不听。
谢谢大家!
我!已经检查了许多与我的答案类似的其他帖子呃,但真的不碰就可以了,像这样的(这这不是重复!!!):不区分大小写映射(http://stackoverflow.com/questions/17556948/case-insensitive-property-mapping ),[为所有对象属性设置原型](http://stackoverflow.com/questions/26662202/set-prototype-for-all-object-properties),还有更多 – WebWanderer
你可以写一大堆setter/getters每个属性名称的大写字母排列。或者,您可以在支持他们的环境中使用['Proxy'对象(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)。 – apsillers
哈哈,我认为为一个关键的所有渗透做一个吸气和二传手会有点紧张。虽然@apsillers好射击。 '代理'将工作,但不幸的是,其ECMA6。无法使用它。 – WebWanderer