Hallo,
es gibt genau einen Grund für die Existenzberechtigung des [[Boolean]]-
Konstruktors - er kann, wie alle Konstruktor-Funktionen, prototypisch
um Eigenschaften bzw. Methoden erweitert werden.
Abgesehen von prototypischer Erweiterung ist noch denkbar, dass man einen booleschen Wert als einzelne Eigenschaft eines Objekts per Referenz an eine Funktion übergeben will. Der Wert kann dann von der Funktion geändert werden, so dass die Eigenschaft im Ursprungsobjekt dann ebenfalls geändert ist, aber ohne dass die Funktion das Objekt "kennen" muss.
An den Haaren herangezogenes Beispiel:
function Trinkglas(form) {
this.form = form;
this.voll = new Boolean(false);
};
function einschenken(voll) {
if(!voll) voll.valueOf = function(){return true};
}
var meinglas = new Trinkglas("Sekt"),
deinglas = new Trinkglas("Whisky");
einschenken(meinglas.voll);
einschenken(deinglas.voll);
alert(meinglas.voll==true); // true
alert(deinglas.voll==true); // true
Die Funktion "einschenken" bekommt nur eine Trinkglas-Eigenschaft "voll" übergeben, kennt also nicht das eigentliche Trinkglas-Objekt, und kann es dennoch füllen. :)
Interessanterweise funktioniert dass aber nicht, wenn man am Ende notiert:
alert(meinglas.voll); // false
alert(deinglas.voll); // false
Man muss schon wie oben einen Vergleich anstellen oder eine doppelte Verneinung bemühen um an den neuen Wert zu kommen:
alert(!!meinglas.voll); // true
alert(!!deinglas.voll); // true
~~~``{:.language-javascript}
Gruß, Don P