Javascript 将ToString标记与Object.defineProperties一起使用时出现意外结果

Javascript 将ToString标记与Object.defineProperties一起使用时出现意外结果,javascript,google-chrome-devtools,Javascript,Google Chrome Devtools,当我在函数/构造函数上设置时,为什么它不工作,为什么它的行为如此奇怪?为什么它与我在函数/构造函数上直接设置toStringTag符号时不一样 (()=>{ console.log('====预期结果=====') const Bob=function(){}; Bob[Symbol.toStringTag]=“乔治”; log('Name:'%s',new Bob().constructor.Name); })(); console.log('\n'); (() => { console.l

当我在函数/构造函数上设置时,为什么它不工作,为什么它的行为如此奇怪?为什么它与我在函数/构造函数上直接设置
toStringTag
符号时不一样

(()=>{
console.log('====预期结果=====')
const Bob=function(){};
Bob[Symbol.toStringTag]=“乔治”;
log('Name:'%s',new Bob().constructor.Name);
})();
console.log('\n');
(() => {
console.log('=======实际结果========')
const Bob=Object.defineProperties(函数(){}{
[Symbol.toStringTag]:{value:'George'}
});
log('Name:'%s',new Bob().constructor.Name);
//在Chrome DevTools控制台中,以下内容将显示为
//Object.defineProperties.value{}
log(“%o%c(请参见DevTools控制台中的输出)”,new Bob(),“color:transparent”);

})();是的,这很奇怪。对我来说,看起来真像个虫子。(
{configurable:true,value:'George'}
获取您的
对象。定义属性。configurable
)如果幸运的话,甚至可能是一个漏洞?:)虽然我没有看到您使用
%o
记录
new Bob()
,并且第二个构造函数的名称是空字符串并不奇怪。因为您将其通过函数而不是直接分配给名称<代码>常量Bob=Object(函数(){})
还将给出
Bob.name==”
toStringTag
仅用于
对象.prototype.toString.call(Bob)
。这就是为什么我在第一个代码片段中用
%o
打开了删除的
控制台.log
——它记录的是
Bob{}
,而不是
George{}
。啊!这就是为什么我如此困惑!我不知道为什么我会认为函数名会被
toStringTag
值所取代,事实从来就不是这样。我想DevTools的bug把我弄糊涂了,让我这么想。谢谢!是的,这很奇怪。对我来说,看起来真像个虫子。(
{configurable:true,value:'George'}
获取您的
对象。定义属性。configurable
)如果幸运的话,甚至可能是一个漏洞?:)虽然我没有看到您使用
%o
记录
new Bob()
,并且第二个构造函数的名称是空字符串并不奇怪。因为您将其通过函数而不是直接分配给名称<代码>常量Bob=Object(函数(){})还将给出
Bob.name==”
toStringTag
仅用于
对象.prototype.toString.call(Bob)
。这就是为什么我在第一个代码片段中用
%o
打开了删除的
控制台.log
——它记录的是
Bob{}
,而不是
George{}
。啊!这就是为什么我如此困惑!我不知道为什么我会认为函数名会被
toStringTag
值所取代,事实从来就不是这样。我想DevTools的bug把我弄糊涂了,让我这么想。谢谢!