Développement Web. Javascript. LI328 Laure Soulier UPMC. slides de Sylvain Lamprier

Documents pareils
Devenez un véritable développeur web en 3 mois!

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

TP JAVASCRIPT OMI4 TP5 SRC

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Programmation Web. Madalina Croitoru IUT Montpellier

TP1. Outils Java Eléments de correction

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Module BD et sites WEB

INTRODUCTION AU CMS MODX

Projet en nouvelles technologies de l information et de la communication

Formation : WEbMaster

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

1. La plate-forme LAMP

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

< Atelier 1 /> Démarrer une application web

Syfadis. > Configuration du poste client. Nous vous aidons à réussir. REFERENCE : Syfadis LMS - 12/09/2008. AUTEUR : Equipe technique Syfadis

SYSTÈMES D INFORMATIONS

Ajax, RIA et HTML Prise en charge d Ajax

Publication dans le Back Office

DECOUVRIR. Le portail La recherche Les présentations & documents

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

WIMS. Découvrir et utiliser

Audit SEO. I / Les Tranquilles d Oléron

Document Object Model (DOM)

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Cliquez sur le site que vous souhaitez consulter, il s affichera directement dans le navigateur.

Comment déposer les comptes annuels des associations, fondations et fonds de dotation.

PARAMETRER INTERNET EXPLORER 9

Tutoriel de formation SurveyMonkey

TP Contraintes - Triggers

Syfadis. > Configuration du poste client. Nous vous aidons à réussir. REFERENCE : Syfadis LMS - 20/06/2007. AUTEUR : Equipe technique Syfadis

Manuel Utilisateur. Boticely

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

Mise en œuvre des serveurs d application

UTILISATION DE L'APPLICATION «PARTAGE DE FICHIERS EN LIGNE»

Publier dans la Base Documentaire

Thème : Création, Hébergement et référencement d un site Web

Encryptions, compression et partitionnement des données

Référencement de votre site Web Google et autres moteurs de recherche (4ième édition)

SITE INTERNET BLOG SITE E-COMMERCE GRILLE D ANALYSE / AUDIT PREMIERE ANALYSE. Entreprises. o Public spécialisé o Etudiants o Enfants

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

Cours d initiation à la programmation en C++ Johann Cuenin

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Utilisation de l éditeur.

arcopole Studio Annexe 7 Architectures Site du programme arcopole :

Notes pour l utilisation d Expression Web

Création, analyse de questionnaires et d'entretiens pour Windows 2008, 7, 8 et MacOs 10

Gestion de contenu d un site web avec TYPO3 Manuel de l administrateur

Point 3.7. Publier des contenus dans un portail e-sidoc. Janvier 2013 Documentation détaillée V 2.2

NOTICE TELESERVICES : Créer mon compte personnel

Guide d implémentation. Réussir l intégration de Systempay

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Service On Line : Gestion des Incidents

DOM - Document Object Model

Les services usuels de l Internet

Alfstore workflow framework Spécification technique

Les outils marketing. Page 1

FTP : File TRansfer Protocol => permets d envoyer des gros fichiers sur un serveur (ou de télécharger depuis le serveur)

GUIDE DE DEMARRAGE V1.02

KompoZer. Composition du site : _ une page d'accueil : index.html. _ une page pour la théorie : theorie.html. _ une page pour les photos : photos.

Optimiser les s marketing Les points essentiels

Introduction aux concepts d ez Publish

1 è r e étape : créer sa base de d o n n é e s

Architecture Orientée Service, JSON et API REST

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Bernard Lecomte. Débuter avec HTML

Pack Fifty+ Normes Techniques 2013

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

Introduction à MATLAB R

Bureautique Initiation Excel-Powerpoint

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Le référencement naturel

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Mysql. Les requêtes préparées Prepared statements

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Module pour la solution e-commerce Magento

VXPERT SYSTEMES. CITRIX NETSCALER 10.1 et SMS PASSCODE 6.2. Guide d installation et de configuration pour Xenapp 6.5 avec SMS PASSCODE 6.

Programmation Web TP1 - HTML

PARAMETRAGE D INTERNET EXPLORER POUR L UTILISATION DE GRIOTTE

Soyez accessible. Manuel d utilisation du CMS

L3 informatique TP n o 2 : Les applications réseau

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Présentation, mise en place, et administration d'ocs Inventory et de GLPI

EXCEL TUTORIEL 2012/2013

TP1 : Initiation à Java et Eclipse

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Introduction à Expression Web 2

HTML. Notions générales

Prezi. Table des matières

Campagnes d ings v.1.6

Transcription:

1 / 40 Développement Web Javascript LI328 Laure Soulier slides de Sylvain Lamprier UPMC

Scripts Web 2 / 40 HTML / CSS permettent de produire des pages Web avec dispositions graphiques évoluées mais Pages peu dynamiques Interactions utilisateur limitées Langages de script pour le Web Permettent de combler ce manque en donnant la possibilité de définir des fonctions De modification des éléments affichés (modification éléments / attributs / propriétés de l arbre DOM) De réaction à des actions utilisateur De communication client / serveur Exécution de traitements côté client Fortement dépendants du navigateur appelant la page web

Scripts Web 3 / 40 Différents langages Javascript (Netscape & Sun) VBscript (Microsoft) XUL (Mozilla) XSLT (W3C) European Computer Manufactures Association (ECMA) Standard ECMA 262

Scripts Web 4 / 40 Navigateur Serveur Base de données HTML AJAX (Tomcat) MySQL CSS Javascript JSON Base de données NoSQL Moteur d'indexation Map - Reduce URL Page d'accueil? Affichage Page Principale HTML Affichage Commentaires Objet JSON Select Commentaires Resultats Select Stats Affichage Statistiques Clic Lien Login Objet JSON Page Login? Resultats Get Nouvelles infos Affichage Page Login HTML Login + MDP Infos valides? Select Enregistrement Index Indexation / Calculs Stats Utilisateur Affichage Page Principale HTML Resultats Select Stats Utilisateur Affichage Statistiques Objet JSON Resultats Nouveau Commentaire Nouveau Commentaire Insert Commentaire Affichage Nouveau Commentaire Objet JSON Insertion Ok Recherche par Mots-Clé Commentaires Pertinents? Select Commentaires Pertinents Affichage Resultats Recherche Objet JSON Resultats

Javascript 5 / 40 Javascript Java Java : Langage objet compilé, qui peut être exécuté côté client par le biais d une applet Javascript : Langage de scripts moins évolué, intégré aux pages Web, qui s inspire de différents langages (dont Java) Javascript Langage interprété Interprétation par le navigateur Code intégré au HTML Langage peu typé Accessibilité du code Applet Java Langage compilé Chargement d une machine virtuelle Code appelé à partir de la page Langage fortement typé Confidentialité du code

Javascript 6 / 40 Javascript Langage orienté objet à héritage prototypique Objets pas instances de classes Prototypes d objets En javascript, toute entité, fonction ou structure peut être vue comme un objet Définition de fonctions se déclenchant Au chargement de la page En réaction à des évènements de la page

Évènements 7 / 40 Gestionnaire d évènement onclick onload onunload onmouseover onmouseout onfocus onblur onchange onselect onsubmit Description Lors d un clic sur l élément associé à l événement Lorsque le navigateur charge la page en cours Lorsque le navigateur quitte la page en cours Lorsque le curseur de la souris passe au-dessus de l élément Lorsque le curseur de la souris quitte l élément Lors de l obtention du focus (élément sélectionné comme étant l élément actif) Lors de la perte du focus (l utilisateur clique hors de l élément) Lors de la modification du contenu d un champ de données Lors de la sélection d un texte (ou une partie d un texte) dans un champ de type "text" ou "textarea" Lors d un clic sur un bouton de soumission d un formulaire (le bouton qui permet d envoyer le formulaire)

Javascript 8 / 40 Insérer du code Javascript Javascript dans balises <! Pour d i f f é r e n t e s b a l i s e s ( avec eventhandler l e nom d un gestionnaire d événement ) > < b a l i s e eventhandler =" j a v a s c r i p t : ( f u n c t i o n ( ) {... } ) ( ) " > <! ou en tant qu action d un formulaire > <form a c t i o n =" j a v a s c r i p t : ( f u n c t i o n ( ) {... } ) ( ) " > Javascript dans <script>... </script> < s c r i p t type =" t e x t / j a v a s c r i p t " > Code j a v a s c r i p t </ s c r i p t > Javascript dans un ou plusieurs fichiers séparés < s c r i p t type =" t e x t / j a v a s c r i p t " src =" s c r i p t s / code. j s " > </ s c r i p t >

Javascript 9 / 40 Exemple premier code Javascript <HTML> <HEAD> <TITLE>Exemple Javascript </ TITLE> </HEAD> <BODY> <SCRIPT type =" text / javascript "> <! a l e r t ( " Message J a v a s c r i p t " ) ; / / > </SCRIPT> </BODY> </HTML>

Debuguer du Javascript : Console Web 10 / 40

Javascript 11 / 40 1 Le langage Javascript 2 Le format JSON 3 Manipulation d objets DOM 4 La librairie JQuery

Javascript : Les variables 12 / 40 Variables : Conteneurs pouvant accueillir toutes sortes de choses En Javascript, pas de type défini lors de la déclaration Deux types de variables Variables à portée locale Variable déclarée à l intérieur d une fonction et avec le mot-clé var Visible uniquement dans la fonction où elle est déclarée Variables à portée globale Variable déclarée à l extérieur d une fonction ou sans le mot-clé var Visible partout

Javascript : Les variables 13 / 40 Variables locales / Variables globales i = 0; / / V a r i a b l e globale var j = Technos Web ; / / V a riable globale f u n c t i o n f ( ) { var k = Javascript ; / / Variable locale l = 20; / / Varibale globale ( car sans le mot clé var ) r e t u r n i * l ; / / x est accessible i c i car i l s a g i t d une v a r i a b l e globale } / / k n est plus accessible i c i ( car locale )

Javascript : Les Fonctions 14 / 40 Une fonction est un bloc d instructions acceptant une liste de paramètres Définie par le mot-clé function Peut posséder un nom Retourne éventuellement une valeur (grâce à return) Fonction Javascript function nom_fonction ( parametre_1,..., parametre_n ) { i n s t r u c t i o n s ; r e t u r n expression ; } On peut stocker une fonction dans une variable Fonction anonyme var f = function ( parametre_1,..., parametre_n ) { i n s t r u c t i o n s ; r e t u r n expression ; } ;

Javascript : Les Fonctions 15 / 40 Paramètres de fonctions Pas obligatoirement même nombre de paramètres à l appel et dans la définition Affectation des paramètres dans l ordre Les paramètres peuvent être accédés par l objet arguments arguments[n-1] correspond à la n-ième valeur passée en paramètre Si nombre de paramètres à l appel < nombre de paramètres attendus paramètres supplémentaires = undefined Si nombre de paramètres à l appel > nombre de paramètres attendus paramètres additionnels peuvent être récupérés par l objet arguments Les paramètres sont passés par référence sauf les types de bases (nombres, caractères,...) qui sont passés par valeur (copie) Paramètres f u n c t i o n fonc ( x ) { a l e r t ( " x = "+ x +" y= "+ arguments [ 0 ] + ", z ="+ arguments [ 1 ] + ", w = "+ arguments [ 2 ] ) ; } fonc ( 1, 2 ) ; / / A f f i c h e x=1, y=1, z=2, w=undefined fonc ( 1 ) ; / / Affiche x=1, y=1, z=undefined, w=undefined fonc ( ) ; / / Affiche x=undefined, y=undefined, z=undefined, w=undefined

Javascript : Les Fonctions 16 / 40 Une fonction peut être définie à l intérieur d une autre La fonction interne peut accéder aux variables locales de la fonction externe...... Et s en souvient même après en être sortie On parle de fermeture Fermeture var x = 1; f u n c t i o n fonc ( ) { var x =2; y = f u n c t i o n ( ) { a l e r t ( x ) ; } a l e r t ( x ) ; } a l e r t ( x ) ; / / a f f i c h e " 1 " ( car l e x de fonc est l o c a l ) fonc ( ) ; / / affiche "2" ( normal, on est dans fonc ) y ( ) ; / / a f f i c h e " 2 " et pas " 1 " ( bien que l on s o i t hors de fonc )

Javascript : Les Tableaux 17 / 40 Un tableau est un ensemble d éléments repérés par leur indice (entier commençant à 0) Création Création littérale Exemple : var tab = [0,1,4,5]; Création grâce au constructeur Array Exemple : var tab=new Array(10); Accès aux éléments par la notation tableau[indice] Exemple : tab[0]=10; var x=tab[0]; Propriété length qui représente la longueur du tableau L ajout d un élément à un indice supérieur à cette taille, augmente automatiquement length Décrémenter length revient à supprimer le dernier élément Méthodes spécifiques comme join, slice, et push

Javascript : La notion d objets 18 / 40 Contrairement aux langages objets classiques (Java, C++,...) La notion de classe n existe pas Le langage n est pas typé En JavaScript, un objet correspond à une sorte de tableau associatif Chaque élément d un objet correspond à une "entrée" (identifiée par un nom) Un attribut correspond à une entrée avec un type quelconque Une méthode correspond à une entrée dont le type attendu est fonction Manipulation dynamique Possibilité d ajouter, modifier ou supprimer les entrées de l objet tout au long de sa vie Mais pas de length, ni fonctions join, splice, push, etc...

Javascript : Les objets 19 / 40 Création d objets Deux modes de création Création à l aide de constructeur Construction littérale Création par constructeur Un constructeur est une fonction qui associe des valeurs (pouvant être des fonctions) à des attributs Un constructeur est appelé par le mot-clé new Constructeur prédéfini Object Exemple : var obj=new Object(); Construction littérale Déclaration entre {...} d associations attributs-valeurs Exemple : var obj={x : 1, y : chaine }; Les valeurs associées peuvent elles-mêmes être des objets Base du format JSON

Javascript : Les objets 20 / 40 Les propriétés des objets peuvent être créées, lues et écrites Soit avec la notation "point" objet.propriété : Exemple : var x=obj.couleur; Soit avec la syntaxe utilisée pour les éléments de tableau : Exemple : var x=obj[ couleur ];

Javascript : Les objets 21 / 40 Objets Javascript var obj = new Object ( ) ; obj [ " a t t r i b u t " ] = " valeur1 " ; / / ou obj. a t t r i b u t = " valeur1 " ; var fonc=function ( parametre1, parametre2 ) { a l e r t ( " parametres : " + parametre1 + ", " + parametre2 ) ; } ; obj [ " methode " ] = fonc ; / / ou obj. methode=fonc ; / / Affichage de l a v a l e u r " a t t r i b u t " de obj a l e r t ( " Valeur de a t t r i b u t : " + obj. a t t r i b u t ) ; / / Exécution de l a méthode methode de obj obj. methode ( " valeur1 ", " valeur2 " ) ;

Javascript : Les objets 22 / 40 Constructeurs Simples fonctions d association propriété-valeur Pas de notions de classes comme dans autres langages Par convention, noms de constructeurs commencent par une majuscule Possibilité d écrire ses propres constructeurs d objets Utilisation du mot-clé this this se rapporte à l objet sur lequel a été appelé la fonction Exemple : l objet x dans x.a() Dans le cas d un constructeur, appel avec new this se rapporte alors à l objet nouvellement créé Affectation de valeurs à différentes propriétés de l objet Exemple : this.couleur=2;

Javascript : Les objets 23 / 40 Constructeur d objets function MonObjet ( param1, param2 ) { t h i s. a t t r i b u t 1 = param1 ; t h i s. a t t r i b u t 2 = param2 ; } o b j e t = new MonObjet ( 5, bleu ) ; a l e r t ( o b j e t. a t t r i b u t 1 ) ; / / a f f i c h e 5 a l e r t ( o b j e t [ " a t t r i b u t 2 " ] ) ; / / a f f i c h e " bleu " o b j e t. a t t r i b u t 3 = new Date ( ) ; / / ajoute une nouvelle p r o p r i é t é à l o b j e t a l e r t ( o b j e t. a t t r i b u t 3 ) ; / / a f f i c h e l a date d a j o u t de a t t r i b u t 3 MonObjet. s t a t i q u e = " s e r i f " ; / / ajoute une p r o p r i é t é s t a t i q u e a l e r t ( MonObjet. s t a t i q u e ) ; / / a f f i c h e " s e r i f " a l e r t ( o b j e t. s t a t i q u e ) ; / / a f f i c h e undefined delete o b j e t. a t t r i b u t 2 ; / / enlève une p r o p r i é t é à l o b j e t a l e r t ( o b j e t. a t t r i b u t 2 ) ; / / a f f i c h e undefined delete o b j e t ; / / supprime l o b j e t e n t i e r ( rarement u t i l i s é ) a l e r t ( o b j e t. a t t r i b u t 1 ) ; / / déclenche une exception

Javascript : Les objets 24 / 40 this permet d affecter des attributs / méthodes à un objet On peut y accéder de l extérieur du constructeur Ils sont donc publiques Grâce au mécanisme de fermeture, on peut définir des attributs / méthodes privés : Constructeur d objets function MonObjet ( val ) { var a = val ; t h i s. geta = f u n c t i o n ( ) { r e t u r n ( a ) ; } t h i s. seta = f u n c t i o n ( newval ) { a = newval ; } } var obj = new MonObjet ( 1 ) ; console. log ( " A : " + obj. a ) ; / / A f f i c h e undefined ( a non d é f i n i ) console. log ( "A: " + obj. geta ( ) ) ; / / Affiche "A : 1" ( geta est un accesseur ) obj. a=2; console. log ( " A : " + obj. geta ( ) ) ; / / A f f i c h e "A : 1" ( l a v aleur n a pas changé ) obj. seta ( 2 ) ; console. log ( "A: " + obj. geta ( ) ) ; / / A f f i c h e "A : 2" ( seta est un m o d i f i c a t e u r )

Javascript : Les objets 25 / 40 On peut faire la même chose avec les méthodes : Constructeur d objets function MonObjet ( parametre1, parametre2 ) { var a t t r i b u t 1 = parametre1 ; var a t t r i b u t 2 = parametre2 ; var methode_privee = function ( ) { console. log ( " A t t r i b u t s : " + a t t r i b u t 1 + ", " + a t t r i b u t 2 ) ; } t h i s. methode_publique = f u n c t i o n ( ) { methode_privee ( ) ; } } var obj = new MonObjet (1, 2 ) ; a l e r t ( " A t t r i b u t 1 : " + obj. a t t r i b u t 1 ) ; / / A f f i c h e undefined ( a t t r i b u t 1 non d é f i n i ) obj. methode_privee ( ) ; / / A f f i c h e " TypeError : obj. methode_privee i s not a f u n c t i o n " obj. methode_publique ( ) ; / / A f f i c h e " A t t r i b u t s : 1, 2"

Javascript : Prototypage 26 / 40 Ce processus de construction d objet est relativement simple mais... A chaque fois nouvelle création avec un constructeur contenant n fonctions internes, n fonctions sont créées pour le nouvel objet Créer 10 objets avec un constructeur contenant 10 fonctions revient à la création de 100 fonctions Peut vite devenir coûteux (d autant plus avec des objets composites) Le comportement souhaité serait que tous les objets pointent vers la méthode methode. Le mécanisme de prototypage de permet de pallier à cet problème

Javascript : Prototypage 27 / 40 Propriété prototype du constructeur Accueille un objet définissant les données par défaut Affectations faites pour l objet (avant ou après déclaration prototype) ont priorité sur les affectations du prototype Les attributs d un objet sont accessibles dans un prototype par this. uniquement pour attributs publiques (privé impossible dans ce cas) Tous les objets créés par un constructeur utilisant un prototype pointent vers les mêmes fonctions qui y sont déclarées

Javascript : Prototypage 28 / 40 Prototypes d objets function MonObjet ( parametre1, parametre2 ) { t h i s. a t t r i b u t 1 = parametre1 ; t h i s. a t t r i b u t 2 = parametre2 ; } MonObjet. prototype. a t t r i b u t 1 =1; MonObjet. prototype. a t t r i b u t 3 =3; MonObjet. prototype. methode = function ( ) { a l e r t ( " A t t r i b u t s : " + t h i s. a t t r i b u t 1 + ", " + t h i s. a t t r i b u t 2 +", "+ t h i s. a t t r i b u t 3 ) ; } var obj = new MonObjet (5, 4 ) ; MonObjet. prototype. a t t r i b u t 2 =2; obj. methode ( ) ; / / A f f i c h e " A t t r i b u t s : 5, 4, 3" / / ( l e s valeurs p r o t o t y p i q u e s pour a t t r i b u t s 1 et 2 n ont aucun e f f e t / / car p r i o r i t é aux valeurs données au c o n s t r u c t e u r )

Javascript : Prototypage 29 / 40 Possibilité d inclure la création du prototype dans le constructeur Permet d avoir accès à toutes les variables du constructeur Mais attention à ne le définir qu une seule fois! Mais attention valeurs d attributs privés définies à la première création! Prototypes d objets function MonObjet ( parametre1, parametre2 ) { t h i s. a t t r i b u t 1 = parametre1 ; var a t t r i b u t 2 = parametre2 ; i f ( typeof MonObjet. i n i t i a l i z e d == " undefined " ) { MonObjet. prototype. methode = function ( ) { a l e r t ( " A t t r i b u t : " + t h i s. a t t r i b u t 1 + a t t r i b u t 2 ) ; } ; MonObjet. i n i t i a l i z e d = t r u e ; } } var obj = new MonObjet (1, 2 ) ; obj. methode ( ) ; / / A f f i c h e " A t t r i b u t s : 1, 2" var obj2 = new MonObjet (3, 4 ) ; obj2. methode ( ) ; / / A f f i c h e " A t t r i b u t s : 3, 2"

Javascript : Héritage 30 / 40 Le prototypage permet de mettre en place un forme d héritage propre aux langages objets Prototype d un constructeur = Objet construit avec un autre constructeur Héritage par prototype f u n c t i o n m1( ) { r e t u r n 1 ; } f u n c t i o n m2( ) { r e t u r n 2 ; } f u n c t i o n m3( ) { r e t u r n 3 ; } f u n c t i o n Sub ( ) { } Sub. prototype. y = m2; alpha = new Sub ( ) ; console. log ( alpha. y ( ) ) ; / / imprime 2 f u n c t i o n Sur ( ) { t h i s. y = m3 ; } parent = new Sur ( ) ; beta = new Sub ( ) ; Sub. prototype = parent ; / / n a pas d e f f e t sur alpha et beta déjà créés console. log ( beta. y ( ) ) ; / / imprime 2 gamma = new Sub ( ) ; console. log (gamma. y ( ) ) ; / / imprime 3 parent. y = m1; / / impacte gamma console. log (gamma. y ( ) ) ; / / A f f i c h e 1 / / A noter : / / Les changements de prototype n ont pas d e f f e t sur les objets déjà créés / / Mais l e s changements dans l e prototype en ont!

Javascript : Construction littérale 31 / 40 Comme on l a vu précédemment : Un objet peut être instancié par un constructeur...... ou formé par une déclaration littérale Construction littérale : Un objet se construit par { } Un tableau se construit par [] Possibilité de former des imbrications d objets / tableaux Exemple de construction littérale var obj = { "menu " : { " i d " : " f i l e ", " value " : " F i l e ", " popup " : { " menuitem " : [ { " value " : "New", " o n c l i c k " : f u n c t i o n ( ) { a l e r t ( " Create New Doc " ) ; } }, { " value " : "Open ", " o n c l i c k " : f u n c t i o n ( ) { a l e r t ( " Open Doc " ) ; } }, { " value " : " Close ", " o n c l i c k " : f u n c t i o n ( ) { a l e r t ( " Close Doc " ) ; } } ] } } } obj. menu. popup. menuitem [ 1 ]. o n c l i c k ( ) ; / / A f f i c h e "Open Doc "

Javascript : Le format JSON 32 / 40 JSON (JavaScript Object Notation) Format de données textuel Dérivée de la construction littérale d objets Format JSON est composé : d ensembles de paires nom / valeur les objets de listes ordonnées de valeurs les tableaux

Javascript : Le format JSON 33 / 40

Javascript : Le format JSON 34 / 40

Javascript : Le format JSON 35 / 40 Le format JSON = chaine de caractères correspondant à la formation littérale d un objet Nécessite de disposer : D un parser : texte JSON objet D un serializer : objet texte JSON

Javascript : Parser du JSON 36 / 40 Parser : la fonction eval(string) Permet d interpréter une chaîne de caractères Puisque le format JSON = chaine de construction littérale, eval( ( +json_text+ ) ) construit l objet correspondant au texte contenu dans json_text Mais : eval est une fonction générique permettant d évaluer n importe quelle chaîne représentant du code Javascript Problèmes de sécurité car du code nuisible peut être exécuté lors de la transformation du texte JSON Faille de sécurité / / JSON transmis par l e serveur : j s o n _ t e x t e = " { \ " g \ " : 1, \ " f \ " : \ " json \ " } " ; var obj=eval ( " ( " + j s o n _ t e x t e + " ) " ) ; / / c o n s t r u c t i o n de l o b j e t / / JSON tronqué l o r s du t r a n s f e r t : j s o n _ t e x t e =" f u n c t i o n ( ) { a l e r t ( Hack! ) } ) ( " ; var obj=eval ( " ( " + j s o n _ t e x t e + " ) " ) ; / / A f f i c h e " Hack! "

Javascript : Parser du JSON 37 / 40 Depuis 2009, les navigateurs intègrent un support JSON comportant un fonction parse(json_text, reviver) json_text : chaîne JSON à transformer reviver (facultatif) : méthode appelée sur chaque couple (clé,valeur) à chaque niveau de la construction de l objet Méthode spécifique n interprétant pas d autre code qu une chaîne de construction JSON JSON.parse / / JSON transmis par l e serveur : j s o n _ t e x t e = " { \ " g \ " : 1, \ " f \ " : \ " json \ " } " ; / / construction de l objet var obj=json. parse ( json_texte ) ; Pour un parsing fonctionnant sur n importe quel navigateur : var obj = typeof JSON! = undefined? JSON. parse ( j s o n _ t e x t e ) : eval ( ( + j s o n _ t e x t e + ) ) ; / / JSON tronqué l o r s du t r a n s f e r t : j s o n _ t e x t e =" f u n c t i o n ( ) { a l e r t ( Hack! ) } ) ( " ; / / Affiche " SyntaxError : JSON. parse : unexpected keyword " var obj=json. parse ( json_texte ) ;

Javascript : Serializer en JSON 38 / 40 Le support JSON comporte égalemment une fonction stringify(objet, replacer); objet : objet à transformer en chaîne JSON replacer (facultatif) : méthode appelée sur chaque couple (clé,valeur) à chaque niveau de la structure de l objet pour spécifier un traitement spécial JSON.stringify / / Objet à s e r i a l i z e r en JSON var obj=new Object ( ) ; obj. g = " 1 " ; obj. f =" json " ; var j s o n _ t e x t =JSON. s t r i n g i f y ( obj ) ; / / j s o n _ t e x t c o n t i e n t " { \ " g \ " : \ " 1 \ ", \ " f \ " : \ " json \ " } " Attention : JSON.stringify ne serialise pas ce qui est dans le prototype

Javascript : JSON 39 / 40 Exemples utilisation replacer et revival : objet Date() var obj ={g : 1, r : new Date ( ) } ; obj ; / / A f f i c h e " ( { g : 1, r : ( new Date (1329482734849))})" sur l a console Web j s o n _ t e x t = JSON. s t r i n g i f y ( obj, f u n c t i o n ( key, value ) { r e t u r n t h i s [ key ] i n s t a n c e o f Date? Date ( + t h i s [ key ] + ) : value ; } ) ; obj2=json. parse ( json_text, function ( key, value ) { var d ; i f ( t y p e o f value === s t r i n g && value. s l i c e ( 0, 5) === Date ( && value. s l i c e ( 1) === ) ) { d = new Date ( value. slice (5, i f ( d ) { r e t u r n d ; } } r e t u r n value ; } ) ; 1)); obj2 ; A f f i c h e " ( { g :1, r : ( new Date (1329482734000))})" sur l a console Web

Javascript : JSON 40 / 40 Pour s assurer que JSON est bien pris en charge par le navigateur : <! Au cas ou pas JSON sur browser > < s c r i p t type =" t e x t / j a v a s c r i p t " src= " https : / / github.com / douglascrockford /JSON js / blob / master / json2. js "> </ s c r i p t >