Als Randbemerkung, der Rückgabewert oder this
ist nur ein Teil der Gleichung.
Betrachten wir zum Beispiel diese:
function Two() { return new Number(2); }
var two = new Two;
two + 2; // 4
two.valueOf = function() { return 3; }
two + 2; // 5
two.valueOf = function() { return '2'; }
two + 2; // '22'
Wie Sie sehen können, .valueOf()
wird intern verwendet und kann für Spaß und Profit ausgenutzt werden. Sie können auch Nebenwirkungen, zum Beispiel erstellen:
function AutoIncrementingNumber(start) {
var n = new Number, val = start || 0;
n.valueOf = function() { return val++; };
return n;
}
var auto = new AutoIncrementingNumber(42);
auto + 1; // 43
auto + 1; // 44
auto + 1; // 45
Ich kann mir vorstellen , dies muss eine gewisse Art von praktischer Anwendung. Und es muss nicht explizit sein , Number
entweder, wenn Sie fügen .valueOf
zu jedem Objekt , um es als eine Zahl verhalten kann:
({valueOf: function() { return Math.random(); }}) + 1; // 1.6451723610516638
Sie können dies nutzen, um ein Objekt zu machen, die immer eine neue GUID gibt, zum Beispiel.