繁体   English   中英

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

[英]Can a JavaScript object return a value AND console log?

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

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'] 时控制台.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-check,以便我可以 console.error 所需的消息。 如果我知道 x 不等于 'c',我想避免完全执行 if-check。

我的另一个选择是摆脱 CONVERT 对象,而是像这样硬编码 if-else 或 switch:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM