Вывод JavaScript в браузере не показывает имя класса (в отличие от Node) - PullRequest
0 голосов
/ 23 ноября 2018

Нello!У меня есть следующий короткий бит JavaScript:

let DynamicallyNamedClass = className => {
  let F = function() {
    this.v = 'hi';
  };
  Object.defineProperty(F, 'name', { value: className });
  return F;
};
let AmazingClass = DynamicallyNamedClass('AmazingClass');
let amazingInstance = new AmazingClass();
console.log(amazingInstance);

Вывод здесь более или менее полезен в зависимости от того, работает ли этот код в Node или в браузере (chrome):

InУзел console.log выдает мне очень хороший вывод:

>> AmazingClass { v: 'hi' }

В браузере совсем не так приятно:

>> F {v: "hi"}

Почему браузер (хром) не показывает мнеимя этого динамически названного класса в выводе отладки?Почему Object.defineProperty не подходит?Я могу использовать гораздо более уродливую технику для отображения динамического имени класса:

let DynamicallyNamedClass = className => {
  return eval(
    `let FF = function ${className}() {` +
    `  this.v = 'hi';` +
    `};` +
    `FF;`
  );
};
let amazingInstance = new (DynamicallyNamedClass('AmazingClass'))();
console.log(amazingInstance); // Shows up nicely!

Если динамическое именование классов может быть достигнуто, зачем применять такой уродливый подход?Почему бы не принять что-то ближе к тому, что использует Node при отображении имен классов в выводе отладки?Здесь есть какая-то рифма или причина?

...