每当我尝试在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]
是否正在设置并且确实如此。
答案 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]'
你会得到你的结果!