Symbol.toStringTag已定义但未被.toString方法使用

时间:2016-12-07 14:57:41

标签: javascript

每当我尝试在Pirate实例上调用Symbol.toStringTag时,我都会尝试使用[object Pirate]来获取.toString,但我不断回复[object Object]

我已经阅读了the ES6 spec for toString,根据它,我的代码应该可行。也许我错过了什么。

以下代码是我预期的目标:

function Pirate(name) {
    this.name = name;
}

Object.defineProperty(Pirate.prototype, Symbol.toStringTag, {
    value: () => 'Pirate'
});

console.log(new Pirate('Jack Sparrow').toString()); // I expected '[object Pirate]'

我在这里遗漏了什么吗?我还检查了Pirate.prototype[Symbol.toStringTag]是否正在设置并且确实如此。

2 个答案:

答案 0 :(得分:1)

试试这个:

function Pirate(name) {
  this.name = name;

  Object.defineProperty(this, Symbol.toStringTag, {
    get: function() {
      return "Pirate";
    }
  });
}
console.log(new Pirate('Jack Sparrow').toString());

答案 1 :(得分:0)

您的代码存在问题 - “toStringTag”是属性而不是方法。因此,如果您在代码中更改它,它将正常工作。

这就是我的意思:

function Pirate(name) {
    this.name = name;
}

Object.defineProperty(Pirate.prototype, Symbol.toStringTag, {
    /* value: () => 'Pirate' */ // change this to property
    value: 'Pirate'
});

console.log(new Pirate('Jack Sparrow').toString()); // I expected '[object Pirate]'

你会得到你的结果!