Вывод JavaScript в браузере не показывает имя класса (в отличие от Node)

Н 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):

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

>> AmazingClass { v: 'hi' }

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

>> F {v: "hi"}

Почему браузер (chrome) не показывает мне имя этого динамически названного класса в отладочном выводе? Почему не 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 при отображении имен классов в выводе отладки? Есть ли здесь какая-то рифма или причина?

0 ответов

Другие вопросы по тегам