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 :

programmer en object orienté en JS la différence entre deux méthodes ?


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 115
    Points : 53
    Points
    53
    Par défaut programmer en object orienté en JS la différence entre deux méthodes ?
    Bonjour,

    J'essaye de créer une librairie perso en JS, et je cherche à percer la programmation en objet avec les tutos que j'ai trouvé sur ce site mais j'ai tout de même des questions :

    Je commence par un bout de code que j'ai repris d'une librairie déjà existante (oui je sais ...), donc voilà la base :

    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() {
    	var window = this,
     
    	manager = window.manager = window.$ = function(el) {
    		return new manager.fn.init(el);
    	};
     
    	manager.fn = manager.prototype = {
    		init : function(el) {
    			... code de sélection des éléments ....
    		},
     
    	};
     
    })();
     
    $() // c'est ok ça fonction
    Maintenant j'essaye de créer une fonction équivalente à trim() en php, mais en l'appelant ainsi dans init() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		init : function(el) {
    			el.trim();
    		},
    Mais c'est là que je ne comprends pas la méthode car suivante fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    (function() {
    	... CODE ...	
    	manager.fn = manager.prototype = {
    		init : function(el) {
    			el.trim();
    		},
    	};
     
    	String.prototype.trim = function() {
    		... CODE QUI TRIM ...
    	}
     
    })();
    Pouvez-vous m'expliquer pour quoi je ne peux pas faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	manager.fn = manager.prototype = {
    		init : function(el) {
    			el.trim()
    		},
     
    		trim : function() {
    		}
    	};
    Sous la forme json (dites moi si je me trompe de terme).

    Dans le premier cas, j'ai fait une "extension" à l'objet "String" via prototype, mais n'y a t'il pas moyen de faire la même chose avec la deuxième méthode ?

    Merci d'avance de vos explications.
    Bien cordialement.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    init : function(el) {
    			el.trim()
    		}
    le premier argument est un élément ou une string?
    Une string je pense ...

    Pour ajouter des fonctions à une string, on étend le prototype , comme tu l'as fait dans ton exemple.

    Le second peux pas marcher, car, tu étends le prototype de manager, à moin que el , est une instance dérivée de manager, la méthode string ne fonctionnera pas.

    En js, on peux faire de l'héritage, mais il est impossible de le faire avec des classe native (sauf Objet d'on toute les autres classes hérite par défaut)

    Je n'ai pas testé avec String, mais avec Function et Array , sans résultat....

    L'appel du constructeur des classes de base peux se faire sans le mot clé new , on peux donc déduire que les constructeurs réelle des classes native est hors de porté.

    Mais tu peux toujours essayer avec String, même si je vois pas à quoi cela pourrais servir de faire des string spécifique.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 115
    Points : 53
    Points
    53
    Par défaut
    Merci pour l'éclaircissement. Donc si je comprends bien,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    manager.fn = manager.prototype = {}
    Est considérée comme une classe native ?

  4. #4
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    Citation Envoyé par nicko_73 Voir le message
    Merci pour l'éclaircissement. Donc si je comprends bien,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    manager.fn = manager.prototype = {}
    Est considérée comme une classe native ?
    c'est juste l'affectation d'un tableau à un attribut!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    Merci pour l'éclaircissement. Donc si je comprends bien,

    Code :

    manager.fn = manager.prototype = {}

    Est considérée comme une classe native ?
    non en js , la propriété prototype d'une fonction est la ou se trouve les attributs et méthodes d'une classe, et la fonction fait office de constructeur.

    toi tu à étendue une classe native String, et tu souhaites utilisé une méthode de la classe string dans une instance de manager, mais c'est deux classe différentes et chacune a ses méthodes spécifique...

    j'ai peux être été un peu tros loin, mais en POO , on peux faire de l'héritage, c'est a dire qu'une classe en plus de sa définition hérite de la définition d'une autre...
    Si tu veux utiliser la méthode trim de la classe String , dans t'as classe manager, il faut que manager hérite de String, hors String est une classe native, et en js, on peux pas faire de l'héritage avec des classes native.

    je te conseille d'allé faire un tour sur google, voire à javascript classe

    bye

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    hello,

    tu as vu le tuto sur les espaces de noms ?

Discussions similaires

  1. [Sérialisation] Différence entre deux méthodes
    Par Deallyra dans le forum Débuter avec Java
    Réponses: 21
    Dernier message: 23/03/2009, 12h50
  2. différence entre deux programmes
    Par deubelte dans le forum C++
    Réponses: 8
    Dernier message: 09/12/2008, 20h39
  3. Différence entre deux méthodes
    Par newmar dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 02/04/2008, 19h29
  4. Comment obtenir la différence entre deux dates ?
    Par jbat dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2005, 09h34
  5. Résultats erroné différence entre deux types TDateTime
    Par Alghero dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 17h03

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