如何更改Object.prototype.toString?

问题描述 投票:1回答:2

我有课:

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

但是那没有用,有帮助吗?

javascript class prototype tostring
2个回答
0
投票

您可以这样操作:

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

var t = new Test();
console.log(t.toString());

0
投票

您可以使用已引入的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不兼容的引擎。

© www.soinside.com 2019 - 2024. All rights reserved.