IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Un objet peut-il être undefined/false ?


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 155
    Par défaut Un objet peut-il être undefined/false ?
    Bonjour à tous

    Voilà je me lance dans ma première bibliothèque, et je voudrais savoir si il est possible de la structurer de sorte que mes objets puissent être crées de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var canvas = new Layout.webglCanvas(...) || new Layout.webglErrorFrame ({allow_2d: true}) || new Layout.defaultCanvas(...);
    A savoir : est ce que ce qui est censé être un objet peut en fait être false/undefined ?

    Il semblerait que non, puisque si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var Layout = {} ;
     
    	Layout.webglCanvas = function( parameters )
    	{
    		var test = false;
     
    		if (test)
    			return new function()
    			{
    				this.name = "name";
    			}
    		else
    			return false;
    	};
    J'obtiens quand même un objet avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var truc = new Layout.webglCanvas();
    Et d'ailleurs si le constructeur Layout.webglCanvas est vide j'obtiens quand même un objet ..

    Y a t-il un moyen d'arriver à ce genre d'appel sur 1 ligne pour simplifier (et éviter d'écrire à chaque fois une propriété d'objet puis la tester ..) ?

    Merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 128
    Par défaut
    Non, un constructeur te renverra toujours un objet, c'est le comportement attendu qui est décrit dans les specs du langage :

    13.2.2 [[Construct]]
    When the [[Construct]] internal method for a Function object F is called with a possibly empty list of arguments, the following steps are taken:
    1. Let obj be a newly created native ECMAScript object.
    (...)
    8. Let result be the result of calling the [[Call]] internal property of F, providing obj as the this value and providing the argument list passed into [[Construct]] as args.
    9. If Type(result) is Object then return result.
    10. Return obj.
    Le mieux selon moi, ce serait de déporter ta logique d'instanciation dans un objet Factory et de laisser ce dernier invoquer le bon constructeur.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 155
    Par défaut
    En effet, je connaissais pas les Factory functions, un truc un peu hybride (quoi que pas encore bien examiné les inconvénients ..).

    Donc ça donnerait ça, et effectivement ça marche (avec des appels sans new) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var Layout = {} ;
    	Layout.webglCanvas = function( parameters )
    	{
    		var obj =
    		{
    			prop : 'prop'
    		};
    		var test = false;
    		return (test)? obj: false;
    	};
    Juste une question : je n'ai pas forcément besoin de faire un prototype comme indiqué dans l'exemple (il n'y aurait qu'un seul objet à créer).

    En tous cas merci, ça simplifie

  4. #4
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    S'il n'y a qu'un objet à créer, pourquoi passer par une "Factory" ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 155
    Par défaut
    Comment ça ?
    Je voulais dire il n'y a qu'une instance d'objet, mais en fait je me rends compte qu'il devrait pouvoir y en avoir plusieurs (plusieurs canvas).

    Mais peu importe : le but est de faire une bibliothèque facile à utiliser donc je définie un "constructeur" non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier qu'un objet peut être enlevé d'un tableau
    Par w4t0r dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/05/2014, 22h05
  2. Réponses: 2
    Dernier message: 21/06/2011, 15h19
  3. Réponses: 5
    Dernier message: 20/08/2009, 11h02
  4. objet HttpSession peut-il être null
    Par AnneB dans le forum Struts 1
    Réponses: 3
    Dernier message: 30/06/2008, 11h23
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo