CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JS] Instance d'objet sans new

vava740
vava740
Niveau 10
05 février 2013 à 10:59:01

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 ?

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment