我有课:
class Test{
contructor(){
this.x = "test"
}
}
var t = new Test()
var toString = Object.prototype.toString
console.log(toString.call(t))
日志显示[object Object]
,我希望它打印类似[object Test]
的内容,我该怎么做?我尝试过
Test.prototype.toString = function() {
return "[object Test]"
}
但是那没有用,有帮助吗?
您可以这样操作:
class Test {
contructor() {
this.x = "test"
}
toString() {
return "[object " + this.constructor.name + "]";
}
}
var t = new Test();
console.log(t.toString());
您可以使用已引入的Symbol.toStringTag完全满足您的需求:
class Test{
contructor(){
this.x = "test";
}
get [Symbol.toStringTag]() {
// either return 'Test' or ...
return this.constructor.name;
}
}
var t = new Test;
var toString = Object.prototype.toString;
console.log(toString.call(t));
但是,如果您使用转译器(Babel,TypeScript)并且将ES5而不是ES2015 +(ES6 +)作为目标,并且目标浏览器不支持Symbol.toStringTag
,那么您会很不幸,因为除非您覆盖Object.prototype.toString
考虑到类,但是您的更改未获准在其他第3部分脚本之前着陆,而这些脚本可能会在原始toString
之后陷入陷阱,从而使其无法工作,因此无法以可靠的方式提供此类功能与Symbol.toStringTag
不兼容的引擎。