Может ли JavaScript объект вернуть значение И консольный журнал? - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть объект, который выглядит примерно так:

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

, и я использую его так:

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

Скажите, что я знаю, что когда x = 'c 'это условие ошибки. Я хотел бы console.error ('значение ограничено пределом 100') , когда x = 'c'.

Существует ли элегантный способ сделать это внутри CONVERT назначение объекта? Я надеялся, что смогу сделать что-то вроде этого:

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

... но это не утешает сообщение об ошибке при вызове CONVERT ['c']. Вместо этого это происходит сразу же, когда создается объект 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, мне теперь нужно делать это, если проверьте, чтобы я мог console.error желаемое сообщение. Я бы хотел избежать полной проверки if, если я знаю, что x не равен 'c'.

Мой другой выбор - избавиться от объекта 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 );
}

Это тоже, я надеюсь, я могу обойтись с использованием lookup-объекта вместо этого.

1 Ответ

2 голосов
/ 05 февраля 2020

Похоже, что вы за 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...