可以使用反射检索Javascript对象密钥名称吗



给定对象:

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'

最新更新