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 :

Concept trop compliqués à visualiser


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmarketer
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmarketer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Par défaut Concept trop compliqués à visualiser
    Bonjour,

    Je me suis mis au développement web il y a un an déjà (css/html/javascript et quelques librairies/php,..)

    J'ai suivi un parcours école de commerce et non pas école d'informatique donc il y a des concepts que je n'arrive toujours pas à comprendre/ visualisé.

    J'espère que vous pourrez m'aider et me permettre enfin de "comprendre" réellement javascript.
    Voici quelques questions:

    1/ Une fonction est un objet.
    Je n'arrive pas du tout à comprendre ça.

    Ce que j'en comprends c'est que dès que le compilateur Javascript voit une déclaration d'une fonction dans le code, il crée un objet avec comme propriétés le nom de la fonction (my_function_name) et le contenu du code entre parenthèse.

    Du coup est ce que cet objet pourrait être schématisé comme ça? {name:"", constructor:"function myname(){ ///code }"}.

    2/ Fonctions et prototype

    J'ai également lu que dès que le compilateur Javascript voit une déclaration de fonction dans le code il crée un objet affecté à la propriété my_fonction_name.prototype ={}


    donc au final, quand le compilateur javascript voit une déclaration de fonction il créer un objet qui a 3 propriétés name/constructor/prototype dont une qui est également un objet (prototype)?

    J'avoue que malgré tous mes efforts, je n'arrive pas à comprendre cet histoire de fonction/objet

    Si vous pouvez m'aider à comprendre ça, ça serait salvateur pour moi.

    Merci

    Ben

  2. #2
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Le concept de programmation Objet remonte aux années 60, mais il à commencé à véritablement sortir de son carton avec le SmallTalk, pour finir par obtenir une véritable reconnaissance avec le C++.
    Puis il y a eu Java, puis JavaScript…
    https://fr.wikipedia.org/wiki/Progra...t%C3%A9e_objet

    Puisque tu centre ta question de l’apparité entre fonction et objet en JS, et que tu en recherche une visualisation, alors mais c’est juste un aspect de l’utilité des langages objets*:

    Avant, et pour les langages dit "procéduraux" la machine se contentait de traduire les instructions écrites en langage "évolué"( ex*: le Cobol, le C ou le Pascal) vers le langage machine.

    https://fr.wikipedia.org/wiki/Langage_machine/

    donc, et pour tes fameuses fonction, on finissait par ce retrouver avec une suite d’instructions positionnés à une adresse fixe en mémoire.
    Tant que les processeurs ne pouvaient ne faire qu’une seule chose à la foi, tout était pour le mieux dans le meilleur des mondes.
    Mais quand les ordinateurs ont commencé à savoir faire plusieurs choses à la foi, comme par exemple appeler 3 ou 4 fois la même fonction pour des besoins différentes, chaque petite fonction unique n’allait pas distribuer des tickets d’entrée pour éviter de se mélanger les pinceaux entre les différents paramètres d’entrée et les différentes réponses qui y sont calculées.

    Pour ce genre de problématique il y a eu différentes approches, à commencer par les systèmes d’exploitation multitâches, et pour finir avec les langages objets.

    Donc pour le cas des fonctions, et pour parler de manière imagée, les programmes stockent les différentes fonctions sur étagères, et lorsque qu’ils ont besoin de l’une d’entre elles, il en font une copie dans une zone de mémoire libre, et ainsi autant de foi qu’on à besoin de la dite fonction.
    Ce mécanisme d’installation d’un objet en mémoire s’appelle une instanciation.

    Comme dans ces étagères ne sont pas occupées que par des fonctions mais tout un tas d’autres trucs utiles et pour des fins de recopie en mémoire, "on" à choisi de tous les appeler des Objets (on aurai pu les appeler des Bibelots, mais Bjarne Stroustrup à cru que je plaisantais quand je lui ai proposé ce terme).

    Quand la fonction n’est plus utilisée, il y a même un programme qu’on appelle réellement un ramasse miettes et qui s’occupe de libérer la mémoire.

    Le mécanisme de langage objet par prototype relève de cette même problématique de mémoire, et par le fait que JavaScript est un langage interprété ayant pour impératif de réaliser la construction de sa bibliothèque d’objet lors du chargement de la page, et qu’il doit pas y passer sa vie, car les internautes sont rarement des gens patients.

    Que l’objet soit une fonction ou un autre bidule, il y toujours une structure de base commune à un même type d’objet.
    Par exemple une fonction aura toujours besoin d’un mécanisme pour lire ses paramètres d’entrées, et ce mécanisme sera le même pour toutes les fonctions.
    Alors plutôt que de recopier ses mêmes instructions à chaque fois, l’interpréteur les garde dans une petite bibliothèque à part et préparée à l’avance pour tous les types d’objets qu’il sait utiliser. Ce ne sont pas encore des objets, ce sont des prototypes.

    Bon je reconnais que j’ai un peu inventé le truc des paramètres d’entrées, mais c’est pour en expliquer le principe, dans la réalité si tu peux voir ce qu’il y a dans la partie prototype des différents objet en utilisant le débogueur de ton navigateur préféré.

    Après, on peut aussi parler des mécanismes d’héritage, qui peuvent aussi avoir des particularités différentes suivant les langages utilisées, mais c’est une autre histoire.

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Il faut distinguer entre l'utilisation du constructeur Function() et la déclaration d'une function().



    Les objets Function créés avec le constructeur Function sont analysés quand la fonction est créée. Ceci est moins efficace que de déclarer une fonction grâce à une expression de fonction ou à une instruction function car celles crées de cette façon sont analysées avec le reste du code.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Visualiser les concepts d'une ontologie sur l'interface
    Par lilyou dans le forum Ontologies
    Réponses: 3
    Dernier message: 04/06/2014, 18h13
  2. [MySQL] Visualiser la conception de ma base de données
    Par gaya102 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/09/2009, 14h53
  3. Réponses: 3
    Dernier message: 10/10/2006, 20h45
  4. Réponses: 2
    Dernier message: 19/06/2006, 08h55
  5. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16

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