gpt4 book ai didi

javascript - 对象原型(prototype) : Case Insensitive Getter On All Properties

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:42:58 24 4
gpt4 key购买 nike

我正在尝试创建一个 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 软件才能进行测试。当我进行所有必要的更改时,此原型(prototype)方法将使一切正常,并且不会将此方法放入任何生产环境中。所以,如果你打算开枪打死我,甚至因为我想这样做而对我大喊大叫,我不会听的。

谢谢大家!

最佳答案

因此,在关注@apsillers 评论后,我确实解决了我的问题(我只需要支持小写和驼峰式大小写。这不是我认为的理想情况,实际上并没有回答我提出案例的问题-不敏感的对象属性,但我应该分享:

function makeCaseInsensitiveObject(obj)
{
var keys;

function PropertyScope(iObj, key, val)
{
var value = val;

var _get = function()
{
return value;
};

var _set = function(v)
{
value = v;
};

Object.defineProperty(iObj, key, {
get: _get,
set: _set
});

Object.defineProperty(iObj, key.toLowerCase(), {
get: _get,
set: _set
});
};

if(Object.keys)
keys = Object.keys(obj);
else
keys = getObjectKeys(obj);

for(var i = 0; i < keys.length; i++)
{
if(typeof keys[i] === 'string')
{
PropertyScope(obj, keys[i], obj[keys[i]]);
}
}

return obj;
};

请注意,此处不区分大小写仅适用于现有对象属性,不适用于任何新属性。

谢谢大家!

关于javascript - 对象原型(prototype) : Case Insensitive Getter On All Properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com