Bonjour,
J'ai remarqué que certains objets JS peuvent être utilisés sans constructeur (et j'ai d'ailleurs pris l'habitude de les utiliser comme tel).
Number('5') retournera bien 5, mais Number('5') instanceof Number retourne false, tandis que new Number('5') instanceof Number retourne true.
C'est la même chose pour String.
Néanmoins pour RegExp, RegExp('foo', 'i') instanceof RegExp vaut true, idem pour Array (sans utiliser new).
J'ai peut-être mal saisi la logique de l'orienté objet par prototype, mais un constructeur peut retourner une valeur ?
function foo(bar) {
this.toto = bar * 2;
return new foo(bar * 2);
}
Sans trop de surprises, ça me throw une RangeError (Maximum call stack size exceeded), mais alors comment les objets Array et RegExp peuvent retourner une instance même si on les appelle sans new ?
Quand à Date, elle me retourne juste une chaîne de caractères si l'on ne l'instancie pas explicitement.
Après quelques tests j'arrive à déterminer si on a utilisé new ou non en testant this instanceof foo, et retourner une instance dans le cas où on a juste appelé le constructeur sans new, mais est-ce une bonne pratique selon-vous ?