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 :

Variable undefined dans un console.log


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de scandinave
    Homme Profil pro
    D�veloppeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Par d�faut Variable undefined dans un console.log
    Bonjour, je fais appel � vous car je ne voit pas du tout d�o� peu venir le probl�me. Dans le code ci-dessous. Ma variable this.implementation est bien renseign�. Le premier console.log() affiche bien le contenu.

    Par contre dans la m�thode validMethod(), je ne peux pas y acc�der.
    le console.log me retourne undefined

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    function Interface(implementation){
    	this.implementation = implementation;
    	console.log(this.implementation);
    }
     
    Interface.prototype.constructor = Interface;
    Interface.prototype.validMethodCount = function(){
    	return this.length !== this.implementation.length
    };
     
    Interface.prototype.validMethod = function(){
    	for(var i in this){
    		console.log(this.implementation);
    		if(i !== "validMethodCount" && i !== "validMethod "){
    			if(this.implementation[i] == undefined){
    				throw "Method " + i + " is missing. You must implement it;";
    			}
    		}
        }
    };
    Quelqu'un saurait me dire pourquoi?

    Seconde question, en utilisant le m�me structure( prototype) est-il possible d'utiliser des accesseurs pour les variables de classe? en passant les variables comme implementation en au lien de merci d'avance.

  2. #2
    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
    Des pistes :

    Pourquoi fais - tu Interface.prototype.constructor = Interface; ?
    Comment cr��es- tu ton objet � partir de Interface(implementation) ?
    en utilisant le m�me structure( prototype) est-il possible d'utiliser des accesseurs pour les variables de classe?
    Prototype et classe dans la m�me phrase, c'est contradictoire. Ce sont deux "cat�gories" de langage objet diff�rentes.

    Javascript est un langage objet orient� prototype. Il n'y a pas de classes alors pourquoi vouloir impl�menter la notion d'interface ? Je ne comprends pas ...
    Il faut bien comprendre que la notion d'interface dans les langages objet orient�s classe sont l� uniquement pour pallier un probl�me de transversalit� que n'offre pas ce type de langage objet.
    En Javascript, il suffit simplement de tester si tel ou tel objet a telle ou telle m�thode. Si elle n'existe pas, tu la cr�es � la vol�e, sinon tu la retournes.

    Il y a quand m�me plusieurs moyens de simuler cela. Voici un cas ultra basique. On check si l'objet courant poss�de les propri�t�s impos�es par l'interface qui est en r�alit� un objet bidon recensant les types de propri�t�s attendues. Attention, si l'objet courant contient plus de propri�t�s, ce bout de code ne le d�tecte pas. Bref, c'est simplement pour imager la chose :
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // l'objet implémente - t - il l'interface ?
    Object.prototype.Implemente = function(interface){ 
      for(var prop in interface) if (interface.hasOwnProperty(prop)) {
        if(typeof this[prop] != interface[prop] || this[prop] === undefined)
          return false;
      }
      return true;
    };
     
     
    var InterfaceTest = {
      prop1: "number",
      prop2: "function",
      prop3: "object"
    }; 
     
    var InterfaceTest2 = {
      prop1: "number",
      prop2: "function"
    }; 
     
    var ObjetTest = {
      prop1: 1,
      prop2: function() { console.log('coucou'); }
    }
     
    console.log(ObjetTest.Implemente(InterfaceTest)); // false, il manque la prop3
    console.log(ObjetTest.Implemente(InterfaceTest2)); // true

    Mais �a n'a pas de sens car c'est un langage dynamique. A la cr�ation de l'objet, peut-�tre que ObjetTest se pliera aux exigences d'une interface quelconque. Mais quid de modifier ensuite l'interface ? Bim, ton objet ainsi cr�� ne correspond plus.
    Renseigne toi �galement sur ce qu'on appelle le "Duck typing". C'est exactement ce qu'utilise Javascript.

  3. #3
    Membre �clair� Avatar de scandinave
    Homme Profil pro
    D�veloppeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Par d�faut
    voici les �l�ments l'utilisant :
    Collision.js
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function Collision(implementatation){
    	Interface.call(this, implementatation);
    	this.parent.validMethod();
    }
     
    Collision.prototype = new Interface();
    Collision.prototype.constructor = Interface;
    Collision.prototype.parent = Interface.prototype;
     
    Collision.prototype.touch = function(item1, item2){
    	this.implementation.touch(item1, item2);
    };
     
     
    Collision.prototype.test = function(){
    	throw "Not implemented";
    };
    AABBCollision.js
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function AABBCollision(){
     
    }
     
    AABBCollision.prototype.touch = function(item1, item2){
    	console.log("toto");
    };
    l'appel � l'interface :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var inter = new Collision(new AABBCollision());
    La mani�re de faire l'appel est moche mais cela est juste pour test ^^.
    concernant le :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Interface.prototype.constructor = Interface;
    j'avoue ne pas mettre trop pos� la question de son int�r�t. Il me semble qu'il rajoute un attribut
    name="Interface"
    dans l'objet.

    J'ai bien compris la diff�rence entre les deux langages ^^. j'essaye juste de voir jusqu�o� je peux allez dans la simulation des des m�canismes objets.

  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
    j'essaye juste de voir jusqu�o� je peux allez dans la simulation des des m�canismes objets.
    Selon moi, cela n'a pas de sens que de vouloir faire faire � Javascript des choses qui lui sont "contre-nature".
    Si on utilise Javascript, il faut se d�faire du paradigme que l'on connait bien, oublier ce qu'on nous a appris et appr�hender ce concept qu'on ne comprend pas assez au final.
    A mon avis, tu vas droit dans le mur � vouloir cr�er des interfaces en Javascript.

  5. #5
    Membre �clair� Avatar de scandinave
    Homme Profil pro
    D�veloppeur Java, NodeJs/Angular
    Inscrit en
    Mai 2009
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Java, NodeJs/Angular

    Informations forums :
    Inscription : Mai 2009
    Messages : 277
    Par d�faut
    je prend en compte ton avis, mais je tiens quand m�me a savoir pourquoi mon this.implementation retourne undefined . j'utilise le m�me m�canisme sans probl�me d'en d'autre fonction js.

  6. #6
    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
    Parce que tu assignes au prototype de Collision un nouvel objet construit � partir d'Interface :
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    Collision.prototype = new Interface();
    Or, en faisant ce simple new Interface(); sans aucun param�tre, this.implementation est donc undefined.

    De plus que fait Interface.call(this, implementation); ? �a ex�cute la fonction Interface qui fait quoi ? Applique implementationthis. Or, qui est this au moment de l'appel de la fonction ? L'objet inter ... Fais un console.log(inter) et tu t'apercevras que ton implementation n'est pas undefined. Tu ne l'attendais pas au bon endroit voil� tout.

    Sinon, tout �a m'a l'air bien compliqu�. Je ne vois pas trop l'utilit� de tout �a. A quoi �a sert ??

Discussions similaires

  1. Ordre des variables JMX dans la console
    Par arno15 dans le forum Wildfly/JBoss
    R�ponses: 1
    Dernier message: 22/01/2013, 16h54
  2. [Eclipse] Logs qui apparaissent en rouge dans la console
    Par elbissat dans le forum Tomcat et TomEE
    R�ponses: 4
    Dernier message: 06/03/2009, 12h20
  3. Variables caract�res dans le Log Binaire.
    Par Cyril_A dans le forum SQL Proc�dural
    R�ponses: 1
    Dernier message: 13/09/2007, 12h03
  4. Log Tomcat 5 dans ma console?
    Par toutoune60 dans le forum Tomcat et TomEE
    R�ponses: 1
    Dernier message: 15/10/2006, 23h01
  5. [TOMCAT][LOGS]pas d'affichage de trace dans la console
    Par fabszn dans le forum Tomcat et TomEE
    R�ponses: 3
    Dernier message: 23/08/2005, 02h28

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