如何将 Object.prototype.更改为String?



我有一个类:

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]"
}

但这没有用,有什么帮助吗?

您可以使用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以考虑类,但是您的更改不会在其他可能捕获原始toString的第三部分脚本之前登陆,因此它不起作用, 没有办法以可靠的方式提供与Symbol.toStringTag不兼容的引擎的此类功能。

你可以这样做:

class Test {
contructor() {
this.x = "test"
}
toString() {
return "[object " + this.constructor.name + "]";
}
}
var t = new Test();
console.log(t.toString());

最新更新