2016-12-07 70 views
0

我試圖用Symbol.toStringTag爲了得到[object Pirate]結果,每當我打電話.toString對海盜的實例,但我不斷收到[object Object]回來了!Symbol.toStringTag定義但沒有使用的ToString方法

我已經閱讀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]是否正在設置。

回答

1

試試這個:

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

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

太棒了!我應該爲該屬性設置getter,而不是設置其值。謝謝! – lucasfcosta

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]' 

,你將有你的結果!

相關問題