我有一组常数,看起来像
let codes = {
OPEN_ACCOUNT: 1000,
CLOSE_ACCOUNT: 1001,
DEPOSIT_FUNDS: 3000
...
}
有时,键会被重命名,添加或删除,因此
codes
对象的结构会发生变化。由于应用程序很大,因此我很乐意使用诸如JSLint / TSLint之类的工具来静态分析代码,以防函数使用不再可用的代码运行:runServerRequest(codes.DEPOSIT_FUNDS_SPECIAL_CASE, 500)
在上面的示例中,代码对象中没有
DEPOSIT_FUNDS_SPECIAL_CASE
,因此从分析器收到警告将非常好。在所有可能的情况下,都不应出现请求不存在的字段的情况。如何以最简单的方式解决此任务?
最佳答案
一种方法是设置一个Proxy
object,如果您访问不存在的属性将抛出该异常:
// define codes above this line.
codes = new Proxy(codes, {
get: function(target, prop) {
if (!target.hasOwnProperty(prop)) {
throw new Error('Attempting to use the deleted code `' + prop + '`.');
}
return target[prop]
}
});
get
method将捕获对code.some_property
的所有访问,如果未定义则抛出。请注意,如果属性已显式设置为
undefined
,则不会抛出此错误。Can I Use?