Bonjour,
Existe-t-il en javascript un équivalent des interfaces en Java?
En fait, j'ai besoin d'un moyen de vérifier qu'un objet donné vérifie une API. Comment, je peux faire ça?
Merci !
Bonjour,
Existe-t-il en javascript un équivalent des interfaces en Java?
En fait, j'ai besoin d'un moyen de vérifier qu'un objet donné vérifie une API. Comment, je peux faire ça?
Merci !
firebug sous firefox ?
Ma page Developpez - Mon Blog Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag![]()
Venez sur le Chat de Développez !
Lol, non, je parlais en termes de programation. L'équivalent de
En Java, un objet implémentant une interface est sûr de respecter l'API de l'interface, càd qu'il possède bien toutes les méthodes décrites dans l'interface. Existe-t-il un équivalent en Javascript?
Code : Sélectionner tout - Visualiser dans une fenêtre à part public interface monInterface {...}
Javascript est un langage à base de prototype.
un objet ne se conforme donc pas à quoi que se soit.
un objet est construit totalement dynamiquement. on peut lui ajouter ou lui supprimer des méthodes, ou membres à n'importe quel moment.
donc se conformer à une interface n'a absolument aucun sens.
imagine en java que tu définisse un interface avec la méthode boolean test();
tu fais une classe A qui implémentent cette interface.
puis dans un code tu instancie un objet le la classe A.
l'objet en question possède la méthode test().
maintenant un code s'applique à l'objet et lui supprime la méthode test()
A est une classe implémentant test() mais ton objet de cette classe n'a pas cette méthode.
en javascript tu n'a pas de classe tu ajoute ou supprime les méthodes dynamiquement.
Tu peux tester si un objet possède un membre particulier ou une méthode particulière. mais ton objet n'appartient à aucune classe.
la notion d'interface est un artifice ajouté dans la théorie des langage à objet à base de classe pour résoudre des problèmes de transversalité que n'offrent pas les langage à base de classes.
javascript n'ayant pas ces contrainte la notion d'interface n'a aucune raison d'exister. elle ne sert à rien.
ton objet n'a pas la méthode désirée tu lui ajoute à la volée.
A+JYT
Je nuancerai quelque peu les propos de sekaijin
C’est justement parce que les objets JavaScript n’ont pas de notion de meta-donnée (class en Java) et qu’ils évoluent dynamiquement dans le temps, que la notion d’interface peut prendre tous son sens.
Pour répondre à Sharcoux, il n’existe pas de mécanique d’interface en JavaScript, personnellement je prototype l’objet javascript pour y ajouter une methode Implements qui vérifie la présence ainsi que le type, des propriétés de l’objet.
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 /*** * return true if this object implements the interface */ Object.prototype.Implements = function(interface) { for(var property in interface) { if( typeof interface[property] != "string") continue; if(this[property]==undefined || typeof this[property] != interface[property] ) return false; } return true; }; /** * Interface IRender */ var IRender = { Color : "number", Matrix : "object", Render : "function" }; var Shape = { Name : "House", Matrix : [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], Render : function () { alert('Rendering ' + this.Name); } }; alert(Shape.Implements(IRender));// false : il manque la propriétée Color! Shape.Color = 0xFF0000; alert(Shape.Implements(IRender)); // true
c'est bien mon propos on teste la présence d'attributs ou de méthodes
car ceux-ci peuvent être ajouté ou supprimé dynamiquement
et non pas l’appartenance à une classe ou l'implémentation d'une interface.
ensuite on peut se définir des liste à vérifier et les nommer "interfaces" mais ce sont toujours les attributs et méthodes qu'on teste au final.
si je fais une pseudo classe qui implémente une "Interface" que j'instancie un objet de la classe et lui retire une méthode de la dite "Interface"
lorsque je ferais le test de vérification sur l'interface je ne peux pas me fier à l'héritage (ni à de quelques métadonnée que j'aurais implémenté dans la classe) pour m'assurer que mon objet est conforme à l'interface. ce n'est plus le cas.
A+JYT
Je suis d’accord avec toi ! Et j’irai même plus loin, toute mécanique de déclaration ou structuration d’Objet en javascript est une erreur.
De nombreux Framework permet de développer en utilisant une approche Orienté Objet, pourtant avec le peu de recule (ca fait que 1 ans que j’ai découvert ce language ) je trouve l’approche générique plus adapté. La réflexivité en Javascript ne coute rien en performance contrairement au language typé comme le C#, alors pourquoi sans priver …
en gros écrire des fonctions générique sans ce soucier du type des objets
Merci beaucoup pour vos réponses !
Je suis toujours impressionné par la rapidité et la qualité des réponse qu'on obtient sur ce forum. Merci !
Partager