2016-12-07 1 views
0

verwenden ich versuche Symbol.toStringTag zu verwenden, um [object Pirate] als Ergebnis zu erhalten, wenn ich versuche .toString auf einer Piraten-Instanz anzurufen, aber ich erhalte immer [object Object] zurück!Symbol.toStringTag definiert, aber nicht durch .ToString Methode

Ich lese bereits the ES6 spec for toString und entsprechend sollte mein Code funktionieren. Vielleicht vermisse ich etwas.

Der folgende Code ist, was ich erwartet passieren:

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

bin ich etwas fehlt hier? Ich überprüfte auch, ob die Pirate.prototype[Symbol.toStringTag] eingestellt wurde und es war.

Antwort

1

Try this:

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

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

Super! Ich hätte den Getter für diese Eigenschaft gesetzt, anstatt seinen Wert zu setzen. Vielen Dank! – lucasfcosta

0

Das Problem mit Ihrem Code ist dies - "toStringTag" a Eigenschaft ist eher als eine Methode. Wenn Sie das in Ihrem Code ändern, wird es korrekt funktionieren. Hier

, das ist, was ich meine:

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

und Sie werden Ihr Ergebnis haben!

Verwandte Themen