In molti casi, è utile avere un metodo costruttore o factory che convalida gli argomenti prima di creare un'istanza di un oggetto, restituendo un nuovo oggetto se gli argomenti sono validi e nulli altrimenti.
Ma nei costruttori javascript tradizionali, sei limitato a ciò che puoi restituire. In particolare, non è possibile restituire null.
Esiste uno schema di programmazione preferito che assolva questo compito, onorando idealmente l'ereditarietà? Concettualmente, sto cercando qualcosa di simile (so che questo codice non può funzionare):
// This RootClass code can't possibly work -- it's for illustration only
function RootClass() {};
RootClass.prototype.constructor = RootClass;
RootClass.createValidated(arg) {
return isArgValid(arg) ? originalConstructor(arg) : null;
}
// example subclass
function OddsOnly(arg) { this._arg = arg; }
OddsOnly.prototype = Object.create(RootClass.prototype);
OddsOnly.prototype.constructor = OddsOnly;
OddsOnly.prototype.isArgValid = function(x) { return x & 1; };
// example calls
var a = OddsOnly.createValidated(3); // => OddsOnly { _arg: 3 }
var b = OddsOnly.createValidated(2); // => null
(Credito extra: esiste un modo per nascondere o offuscare il metodo new
in modo che deve utilizzare il metodo createValidated()
?)