javascript - JavaScript 对象可以返回值和控制台日志吗?

标签 javascript object console lookup

我有一个看起来像这样的对象:

const CONVERT = {
  a: 1,
  b: 2,
  c: 100,
};

我像这样使用它:

let x = 'a';
// some logic that may change x
const value = CONVERT[x];

假设我知道当 x = 'c' 时这是一个错误条件。当 x = 'c' 时,我想 console.error( '值限制在 100' )

是否有一种优雅的方法可以在 CONVERT 对象赋值中执行此操作?我希望我能做这样的事情:

const CONVERT = {
  a: 1,
  b: 2,
  c: ( ()=> { console.error( 'value clamped at the limit of 100' ); return 100; )(),
};

...但是当调用 CONVERT['c'] 时,它不会 console.error 消息,而是在实例化 CONVERT 对象时立即执行此操作。

我能想到的唯一选择是:

let x = 'a';
// some logic that may change x
const value = CONVERT[x];
if( value === 100 ) {
  console.error( 'value clamped at the limit of 100' );
}
但这意味着无论我在哪里使用 CONVERT,我现在都需要执行此额外的 if 检查,以便我可以 console.error 所需的消息。如果我知道 x 不等于 'c',我想避免完全执行此 if 检查。

我的另一个选择是摆脱 CONVERT 对象,而是硬编码 if-else 或开关,如下所示:

let value;
if( x === 'a' ) {
  value = 1;
} else if( x === 'b' ) {
  value = 2;
} else if( x === 'c' ) {
  value = 100;
  console.error( 'value clamped at the limit of ', value );
}

这也是,我希望我可以使用查找对象来绕过。

最佳答案

您似乎正在寻找 getter ,这是一个可以在属性访问时执行的函数。从 getter 返回的值是 CONVERT['c'] 计算得出的值:

const CONVERT = {
  a: 1,
  b: 2,
  get c() { 
    console.error( 'value clamped at the limit of 100' ); 
    return 100; 
  }
};


let x = 'a';
x = 'c'; // some logic that may change x
const value = CONVERT[x];
console.log(value);

关于javascript - JavaScript 对象可以返回值和控制台日志吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60068044/

相关文章:

linux - 文件名看起来一样,但复制后不同

c# - 是否可以在单个 Visual Studio Windows 控制台项目中混合使用 .cs (C#) 和 .fs (F#) 文件? (。网)

javascript - Debian Jenny 上的 Node 不使用本地时区

javascript - 是否有 JSONP 图片搜索 API 可让用户在我的网站上搜索图片?

Javascript:如何在字符串对象中的两个对象之间添加逗号但不添加最后一个对象

javascript - 如何将数据转换为这样的结构

c++ - cmd.exe 中的控制台输出,以及通过 C++ 的 powershell.exe

javascript - 如何在 Angular 2+ 中使用第三方 js 库而不安装类型?

javascript - MongooseJS 填充反模式吗?

javascript - 对象构造函数和 TypeError 中的递归函数