给定对象:
const product = {
food: true,
clothes: false
}
是否有一种方法可以在不使用Object.keys
或类似方法的情况下以编程方式获取some键的名称。类似于product.food.getKeyName()
,它将返回一个字符串'food'
。我发现我经常不得不将对象密钥名称添加到一些常量对象中,比如:
const products = {
food: 'food',
clothes: 'clothes'
}
这是我想出一个程序化解决方案的主要动机。
下面是一个示例用例。我想运行一个对象的所有键,并对每个键有不同的行为:
Object.keys(product).map(key => {
if (key === 'food') {
// do something specific for food
}
})
但我不想写像'food'
这样的字符串文字。
由于@Enijar
的提示,确实可以使用Javascript Proxy API以编程方式检索对象密钥名称,如下所示:
const product = {
food: true,
clothes: false
}
const proxy = new Proxy(product, {
get: function(originalObject, objectKey) {
if (originalObject.hasOwnProperty(objectKey)) {
return objectKey
}
throw new Error(`The field '${objectKey}' doesn't exist.`)
},
})
console.log(proxy.food) // logs 'food'
console.log(product.food) // logs 'true'