你好!我有以下一小段 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)中运行:
在 Nodeconsole.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 使用的东西呢?这里有什么押韵或理由吗?