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