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