Javascript 为什么EventTarget子类实例会丢失名称?

Javascript 为什么EventTarget子类实例会丢失名称?,javascript,ecmascript-6,Javascript,Ecmascript 6,当前版本的JavaScript将EventTarget实现为类而不是接口,因此您可以使用所有预期方法创建EventTarget实例 我试图在控制台中复制/粘贴(在Chrome和Firefox上),但当我检查myEventTarget对象(作为名为myEventTarget的EventTarget的子类构建)时,控制台说myEventTarget是一个EventTarget,而不是一个myEventTarget 这是密码 //这是MDN示例 类MyEventTarget扩展了EventTarget

当前版本的JavaScript将EventTarget实现为类而不是接口,因此您可以使用所有预期方法创建EventTarget实例

我试图在控制台中复制/粘贴(在Chrome和Firefox上),但当我检查myEventTarget对象(作为名为myEventTarget的EventTarget的子类构建)时,控制台说myEventTarget是一个EventTarget,而不是一个myEventTarget

这是密码

//这是MDN示例
类MyEventTarget扩展了EventTarget{
构造函数(mySecret){
超级();
这是我的秘密;
}
get secret(){返回此。\u secret;}
};
设myEventTarget=新的myEventTarget(5);
让值=myEventTarget.secret;//==5.
myEventTarget.addEventListener(“foo”,函数(e){
这个._secret=e.细节;
});
let event=new CustomEvent(“foo”,{detail:7});
myEventTarget.dispatchEvent(事件);
让newValue=myeventarget.secret;//==7.
//下面是我添加的代码
//一切似乎都照常进行
log(myEventTarget的myEventTarget实例)
//控制台说这是真的
//但是如果我尝试打印实例。。。
console.log(myEventTarget)
//事件目标{u secret:7}
为什么控制台说myEventTarget只是一个EventTarget

我发现这种情况非常少见,因为如果我键入以下代码,控制台会说myEventTarget实际上是一个myEventTarget实例

类MyEventTarget扩展类SomeOtherClass{}{
构造函数(mySecret){
超级();
这是我的秘密;
}
get secret(){返回此。\u secret;}
};
设myEventTarget=新的myEventTarget(5);
log(myEventTarget的myEventTarget实例)
//安慰者努力地说那是真的
//如果我尝试打印实例。。。
console.log(myEventTarget)
//…控制台正确地说
//MyEventTarget{{秘密:5}
那么,如果我使用EventTarget作为超类,实例会丢失其构造函数名称吗?
我知道这没什么大不了的,我认为打印类名只是为了调试目的,但这是有原因的?

发生这种情况是因为
EventTarget
重写并继承了这种行为。您可以将其覆盖为您想要的任何内容

类MyEventTarget扩展了EventTarget{
构造函数(mySecret){
超级();
这是我的秘密;
}
get secret(){返回此。\u secret;}
获取[Symbol.toStringTag](){
返回this.constructor.name
}
};
设myEventTarget=新的myEventTarget(5);
让值=myEventTarget.secret;//==5.
myEventTarget.addEventListener(“foo”,函数(e){
这个._secret=e.细节;
});
let event=new CustomEvent(“foo”,{detail:7});
myEventTarget.dispatchEvent(事件);
让newValue=myeventarget.secret;//==7.
//下面是我添加的代码
//一切似乎都照常进行
log(myEventTarget的myEventTarget实例)
//控制台说这是真的
//但是如果我尝试打印实例。。。
console.log(myEventTarget)
//MyEventTarget{{秘密:7}
log(Object.prototype.toString.call(myEventTarget))
//[对象MyEventTarget]