Boolean.prototype.identifyYourself = function(t) { console.log("I am " + (this ? 'true' : 'false')); }; false.identifyYourself(); // I am true
Ja, das ist eine Tücke von boxed Primitives, wenn man eine Methode auf einem Primitiven Datentypen aufruft, wird er zu einem Boxed Primitive gecoerced, und dadurch ist this
in der Methode ein Objekt und Objekte sind truethy
. Deshalb muss man in so einem Fall this
ist erst wieder unboxen, das geht mit .valueOf()
:
Boolean.prototype.identifyYourself = function(t) {
console.log("I am " + (this.valueOf() ? 'true' : 'false'));
};
false.identifyYourself();
// I am false
Zu Primitves und Boxed Primitives lohnt sich das Kapitel 3 von Kyle Simpsons Buch You Don't Know JS zu lesen.