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 :

[POO] d�rivation / classe Array pour IE


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut [POO] d�rivation / classe Array pour IE
    Bonjour � tous.
    Soit j'oublie quelque chose d'�norme, soit IE prouve une fois de plus son originalit�. Soit une classe HArray d�riv�e de Array :
    1 - code minimaliste pour HArray :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    HArray.prototype = new Array();
    // @in src = argument facultatif spécifiant un tableau à copier
    function HArray(src) {
    	if( !!src ) this.copy(src);
    }
     
    HArray.prototype.copy = HArray_copy;
    // @in src = tableau à copier
    function HArray_copy(src) {
    g_dbg.addTrace("-------> HArray_copy : src.length = " + src.length)
    	this.splice(0); 
    	if( !!src ) for( var i = 0; i < src.length; ++ i ) this.push(src[i]);
    g_dbg.addTrace("-------> HArray_copy : this.length = " + this.length)
    }
    o� g_dbg est une instance (variable globale) d'une classe utilitaire qui enregistre les traces, comme le nom de la m�thode l'indique, et les restitue ensuite sur demande. Rien de sp�cial donc.

    2 - code de test :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<h1>Vérif IE</h1>
    <script language="javascript"><!--
    function test1() {
    	var out = $dyn($id('HArray_TestIE'));
    	g_dbg.addTrace("test1");
    	var arr = new HArray(new Array(0, 1, 2, 3, 4, 5));
    	for(var i = 0; i < g_dbg.getTraces().length; ++ i ) out.setText(g_dbg.getTraces()[i], true, 'br');
    }
    --></script>
    <div id="HArray_TestIE" style="background-color:#F0F0F0"></div>
    <button onclick="test1()">test1</button>
    out prend un pointeur encapsul� sur le div 'HArray_TestIE', on initialise un HArray et on �crit les traces dans le div.

    R�sultat :
    3 - traces sous Firefox et Opera conforme � mes attentes :
    mardi 20 novembre 2007 12:11:25 === test1
    mardi 20 novembre 2007 12:11:25 === -------> HArray_copy : src.length = 6
    mardi 20 novembre 2007 12:11:25 === -------> HArray_copy : this.length = 6
    4 - traces sous IE7 :
    mardi 20 novembre 2007 12:19:17 === test1
    mardi 20 novembre 2007 12:19:17 === -------> HArray_copy : src.length = 6
    mardi 20 novembre 2007 12:19:17 === -------> HArray_copy : this.length = 0


    Conclusion : IE7 ne traite pas correctement Array.push() pour les classes d�riv�es ???? Avez-vous des �claircissements l�-dessus ou bien est-ce que je fais une grosse b�tise quelque part ? Eventuellement, avez-vous des suggestions pour un wouhorqe heurrahounde ?

  2. #2
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    336
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par d�faut
    Quel est l'interet de d�river la classe?

  3. #3
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    Il peut y avoir plusieurs r�ponses :
    1 - pour le c�t� p�dagogique de l'exercice
    2 - parce que d�river la classe au lieu d'en �tendre les propri�t�s me permet
    a/ surtout sur les classes de librairie, d'�viter les conflits de noms �ventuels avec d'autres extensions de la m�me classe
    b/ en g�n�ral, de g�rer l'instanciation de vari�t�s de classes ad hoc en fonction du contexte (avec une Fabrique, en somme)
    c/ est cens� marcher

  4. #4
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    �a ne fera pas avancer le shmilblick mais j'ai lu ton code...
    explication...
    et ton final ...
    j'ai rien compris ^^
    juste que IE ne prend pas en charge l'objet Array() en prototype de fonction ?

    toute mes condol�ances

    En m�me temps moi non plus je n'ai pas trouv� d'int�r�t

    bon courage pour la suite

  5. #5
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    336
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Par d�faut
    Citation Envoy� par Herode Voir le message
    Il peut y avoir plusieurs r�ponses :
    1 - pour le c�t� p�dagogique de l'exercice
    2 - parce que d�river la classe au lieu d'en �tendre les propri�t�s me permet
    a/ surtout sur les classes de librairie, d'�viter les conflits de noms �ventuels avec d'autres extensions de la m�me classe
    b/ en g�n�ral, de g�rer l'instanciation de vari�t�s de classes ad hoc en fonction du contexte (avec une Fabrique, en somme)
    c/ est cens� marcher
    Certes mais quand tu proposes un exercice �a � vocation � former pour une utilisation ult�rieure.

    Hors faire �a, j'entends d�river une classe existante dans le core du langage, n'a aucun int�r�t, d'ailleurs ton code est illisible

    Le fait d'avoir des effets de bord me parait totalement pr�visible.

    Je te pr�conise de faire l'exercice sur un prototype maison et si tu dois vraiment implementer copy d'utiliser un le prototypage d'Array directement.

  6. #6
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    Il n'y a pas d'effet de bord et affirmer p�remptoirement que d�river une classe du Core n'a pas d'int�r�t me semble un peu l�ger, mais ce n'est pas le sujet. Je ne doute pas que tes techniques de programmation soient infiniment sup�rieures aux mis�rables miennes, ma question porte cependant sur le "pourquoi �a ne marche pas", et pas sur autre chose. J'ai donn� la traduction des m�thodes utilis�es dans le code. Rien de compliqu� pourtant. Pour reformuler �a de mani�re plus neutre, tu obtiendras le m�me r�sultat avec :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    MyArray.prototype = new Array();
    function MyArray() {}
    var arr = new MyArray();
    arr.push(12);
    alert(arr.length);
    qui donne 1 sous FF ou Opera et 0 sous IE.

    Je r�p�te donc ma question : pourquoi push() ne marche-t-il pas sous IE ?
    Soit c'est (je le suppose) un probl�me li� � IE, soit il y a une raison li�e au langage lui-m�me et FF/Opera absorbent l'erreur et en ce cas, laquelle. Voil� ce que je cherche � �claircir.

  7. #7
    Expert confirm�
    Avatar de le_chomeur
    Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2006
    Messages
    3 653
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 3 653
    Par d�faut
    j'ai voulu comprendre pourquoi , m'ai je n'ai toujours pas trouv� ...
    j'ai impl�ment� ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     function MyArray() {}
      var test = new Array('toto','titi');
      alert(test);
      MyArray.prototype = test;
      var arr = new MyArray();
      alert(arr);
      arr.push(12);
      alert(arr.length);
      </script>
    ce qui nous donne sous FF : 'toto','titi' , 'toto','titi' , 3
    sous IE : 'toto','titi' , [object] , 2

    Selon toute vraisemblance , la classe Array sous ie fait r�f�rence a l'objet et non a la classe elle m�me, donc pas de possibilit� de la d�riv� sous IE ...

    J'esp�re avoir �claircit un peu la situation :$

Discussions similaires

  1. R�ponses: 5
    Dernier message: 09/10/2008, 16h40
  2. R�ponses: 1
    Dernier message: 30/04/2008, 19h35
  3. [POO] [DEV] Classe de debug pour PHP
    Par -COil- dans le forum Langage
    R�ponses: 11
    Dernier message: 09/06/2007, 19h53
  4. [POO] vider un array membre de classe
    Par jlf dans le forum Langage
    R�ponses: 2
    Dernier message: 20/10/2005, 10h54
  5. R�ponses: 3
    Dernier message: 28/09/2005, 08h39

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