|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Bonjour,
Etant habitué au Java, je suis perturbé par l'emploi de this en Javascript, qui me semble légèrement différent. En particulier, si j'ai une classe définie par : Code :
|
||
|
|
00
|
|
|
#2 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Il me semble que ta remarque est juste car si tu ne précises pas this, dans ce cas il recherche dans son bloc s'il y a une variable qui s'appelle de la même manière sinon il en crée une!
Donc il est possible qu'il la crée! A confirmer! De plus, lorsque nous voulons déclarer une variable en javascript, il est raisonnable de précédé le nom de la variable par "var" mais si on ne le met il n'y aura pas d'erreur!
__________________
![]() ![]() ![]() David55 |
|
|
00
|
|
|
#3 | ||||
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Bon, ben du coup, je comprends pas comment je dois utiliser les variables en javascript. Voilà ce que j'ai dans mon fichier javascript :
Code :
Code :
alors que alerte2 renvoie "undefined"... Je ne comprends pas pourquoi les deux ne renvoient pas là même chose... |
||||
|
|
00
|
|
|
#4 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
remplace:
Code :
doc = (jDocText==null || jDocText=="") ? new JSONDoc() : JSON.parse(jDocText); Code :
this.doc = (jDocText==null || jDocText=="") ? new JSONDoc() : JSON.parse(jDocText);
__________________
![]() ![]() ![]() David55 |
|
|
00
|
|
|
#5 | ||||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Salut,
on doit toujours utiliser this pour désigner les propriétés de la classe. D'autre part, le constructeur reste une fonction comme les autres. Avec ce code : Code JS :
Pour être plus précis : Code JS :
Quant à loc, c'est généralement une variable locale au constructeur. Je dis bien généralement, car si tu déclares des méthodes de classe à l'intérieur du constructeur, tu peux accéder à loc depuis ces méthodes, grâce au principe des closures. Mais je te conseille d'éviter ça
__________________
Disposition de clavier ergonomique française : Bépo |
||||
|
|
20
|
|
|
#6 |
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
@david55 : Merci pour ton aide.
Malheureusement, perso, j'obtiens le même résultat : un objet avec alert1, et undefined avec alert2. Chez toi ça marche? @Watilin : c'est cool ! Merci pour ces explications ! C'est fou : on trouve rien sur le net qui explique ça aussi clairement que tu viens de le faire... J'essaie tout de suite |
|
|
00
|
|
|
#7 | ||
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Non je ne peux pas essayer de chez moi mais je pense que tu devrai prendre ne compte les remarques de Watilin qui sont très intéressante
Si je trouve une autre solution je te tiens au courant (idem pour toi bien sure) Essaye de remplacer par: Code :
__________________
![]() ![]() ![]() David55 |
||
|
|
00
|
|
|
#8 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Sinon je peux te conseiller ce lien. Il parle aussi du mot clé this
__________________
![]() ![]() ![]() David55 |
|
|
00
|
|
|
#9 | ||||
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Bon, après modification de mon script :
Code :
Code :
|
||||
|
|
00
|
|
|
#10 | ||
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
et si tu remplace ton 2ème script par:
Code :
__________________
![]() ![]() ![]() David55 |
||
|
|
00
|
|
|
#11 | ||
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Exemple complet ressemblant au tiens:
Code :
__________________
![]() ![]() ![]() David55 |
||
|
|
00
|
|
|
#12 | ||
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Je comprends que dalle. Bon, pour que ça marche, j'ai dû remplacer ma classe par ça :
Code :
Si qqn a l'explication de pourquoi il faut faire ça, ou peut me proposer une méthode plus propre, hésitez pas ^^ Merci en tout cas david et watilin |
||
|
|
00
|
|
|
#13 | ||
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Oui j'allais te proposer la même chose:
Code :
Vive le javascript PS: Du coup n'oublie pas de passer en RESOLU
__________________
![]() ![]() ![]() David55 |
||
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Je n'oublierai pas.
Mais malgré tout, j'ai jamais vu de code source utilisant this devant la déclaration d'une méthode. Encore moins sur des tutos. Du coup, je suis sûr qu'il y a un autre manière de faire. |
|
|
00
|
|
|
#15 | |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Citation:
__________________
![]() ![]() ![]() David55 |
|
|
|
00
|
|
|
#16 |
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Ah oui, tiens, j'avais pas vu
![]() Bon ben merci bien. Je vais partir là-dessus |
|
|
00
|
|
|
#17 | ||
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
Lorsque tu écris
Code :
loadDocument = function(parametre1) {...} Pour parer à cela, il faut soit effectivement faire passer la fonction comme méthode de l'objet (donc avec this.loadDocument = ...), soit utiliser le prototypage, qui offre l'intérêt de ne pas avoir à redéfinir la fonction pour chaque instance de l'objet : Code :
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
||
|
30
|
|
|
#18 | |||||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Citation:
Code JS :
Le prototype permet de définir l'ensemble des propriétés et méthodes de la classe. Il est la manière la plus « proche de Java » de déclarer une classe en JavaScript. Le constructeur se cantonne également à son rôle en Java : il fait les intialisations. Note que je n'étais pas obligé de déclarer type dans le prototype, mais je préfère le faire pour faciliter la maintenance. Le gros truc en plus par rapport à Java c'est que, quand je modifie le prototype d'une classe, ça modifie en temps réel toutes les instances de la classe ! Code JS :
Bon je te l'accorde, on évite de trop bidouiller ses classes en live quand on est sain d'esprit. Mais ça a quand même des applications assez pratiques, par exemple pour améliorer les objets natifs comme la classe Array PS : ouah, grillé par Bovino
__________________
Disposition de clavier ergonomique française : Bépo |
|||||
|
|
30
|
|
|
#19 | ||
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Stylé ! Merci pour toutes ces réponses. J'en profite pour une dernière question : je vois que vous séparez la fonction de la classe. Est-il possible de les regrouper? Un peu comme ça :
Code :
|
||
|
|
00
|
|
|
#20 | ||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Non, on ne peut pas. Le prototype est une propriété de la fonction Pates, on pourrait voir ça comme une variable statique. D'ailleurs, rien ne t'empêche d'ajouter d'autres variables statiques de cette manière.
Code JS :
Comme tu vois, on retrouve la plupart des concepts de Java, seule la syntaxe est différente. Il faut s'y habituer
__________________
Disposition de clavier ergonomique française : Bépo |
||
|
|
20
|
Copyright © 2000-2012 - www.developpez.com