SlideShare uma empresa Scribd logo
1 de 10
JavaScript
Prise en main & Fondamentaux
Vincent PETETIN
Historique
• Crée il y a presque 20 ans (1995), lorsque Java était à la mode sur Internet
• « Java » dans « JavaScript » est purement commercial, seul la syntaxe à été pris
comme concept
• Typage dynamique : Scheme
• Héritage par prototype : Self
Fondamentaux
• Les objets
• La portée des variables (var, function)
• Les fonctions
• Le contexte (this)
Fondamentaux - les objects
• Dans JavaScript tout est objet
• 1 objet = collection de clés/valeurs
forme = {
couleur: "vert",
type: "carré",
foo: "yahouu !"
};
forme = new Object();
forme.couleur = "vert";
forme.type = "carré";
forme.foo = "yahouu !";
forme = {
couleur: "vert",
type: "carré",
foo: "yahouu !"
};
console.log(forme["couleur"]); // vert
console.log(forme["type"]); // carré
delete forme.foo;
for (var propertyName in forme) {
console.log(propertyName + ": " + forme[propertyName]);
}
// couleur: vert
// type: carré
Les fondamentaux – portée des variables
• Portée = vision de l’interpréteur à un instant t
• Portée globale (window dans un navigateur)
• 1 fonction = 1 portée
• « var » indique de créer une variable visible que pour la portée de création
test1 = function () {
var x = 1;
test2 = function () {
var x = 2;
test3 = function () {
var x = 3;
console.log(x); // 3
}();
}();
console.log(x); // 1
}();
console.log(x); // undefined
function genericFunctionName() {
for (i = 0; i < myArray.length; i++) {
console.log(i);
}
}
for (i = 0; i < 10; i++) {
genericFunctionName();
}
function genericFunctionName() {
for (i = 0; i < myArray.length; i++) {
console.log(i);
}
}
for (var i = 0; i < 10; i++) {
genericFunctionName();
}
function genericFunctionName() {
for (var i = 0; i < myArray.length; i++) {
console.log(i);
}
}
for (i = 0; i < 10; i++) {
genericFunctionName();
}
Fondamentaux – portée des variables
• Havre de paix
(function () {
var privateVariable = true;
window.init = function () {
console.log(privateVariable);
}
}());
init(); // true
console.log(privateVariable); // undefined
• 2 façons de déclarer une fonction :
• Implicite (la « mauvaise » façon de faire) :
• Explicite (la bonne façon de faire) :
Fondamentaux – les fonctions
action();
function action() { }
var action = function () { };
action();
if (1 == 1) {
// l'exécution du code passe ici ...
function action() {
console.log('a == 1');
}
} else {
// ... pourtant le compilateur se souvient de cette fonction
function action() {
console.log('a != 1');
}
}
action(); // a != 1
if (1 == 1) {
// l'exécution du code passe ici ...
action = function () {
console.log('a == 1');
}
} else {
// ... cette méthode n'est jamais appelée car la portée à été maitrisée
action = function () {
console.log('a != 1');
}
}
action(); // a == 1
• Auto-exécution :
• JavaScript est un langage orientée prototype : les fonctions en sous le cœur
• 1 fonction = 1 objet avec 1 propriété « prototype »
• Opérateur new (prototype.constructor)
• Héritage
Fondamentaux – particularités des fonctions
var autoInit = function () {
console.log('hello world');
}(); // hello world
var crypto = function () {
this.seed = 10;
this.version = "V1";
};
var myCrypto = new crypto();
console.log(myCrypto.version); // V1
var crypto = function () {
}
crypto.prototype.seed = 10;
crypto.prototype.version = "V1";
var myCrypto = new crypto();
console.log(myCrypto.version); // V1
var crypto = function () {
this.seed = 10;
this.version = "V1";
};
var myCrypto = new crypto();
crypto.prototype.writeSeed = function () {
console.log(this.seed);
};
myCrypto.writeSeed(); // 10
String.prototype.firstChar = function() {
return this[0];
}
console.log("premier".firstChar()); // p
• Différent des langages de programmation orienté Object (C++, Java,C#)
• JavaScript est capable de copier le corps du fonction d’un objet à l’autre
• prototype.call permet de fixer le contexte d’exécution d’une fonction
Fondamentaux – le contexte (ou this)
var user = function () {
this.name = "vp";
this.display = function () {
console.log(this.name + " !!!");
}
};
var user1 = new user();
document.onclick = user1.display; // undefined !!!
var user = function () {
this.name = "vp";
this.display = function () {
console.log(this.name + " !!!");
}
};
var user1 = new user();
document.onclick = user1.display; // my document !!!
document.name = "my document";
var user = function () {
this.name = "vp";
this.display = function () {
console.log(this.name + " !!!");
}
};
var user1 = new user();
document.onclick = user1.display; // vp !!!
document.onclick.call(user1);
document.name = "my document";
• Il n’y a pas de classe en JavaScript !
• JavaScript est un langage « orienté prototype »
• Prototypage :
• Le prototype d’une classe est sa définition
Prototypage

Mais conteúdo relacionado

Mais procurados

Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql courszan
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4halleck45
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPierre Faure
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Engineor
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partiekadzaki
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 

Mais procurados (17)

Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Cours php
Cours phpCours php
Cours php
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
PHP 1 - Apprendre les bases
PHP 1 - Apprendre les basesPHP 1 - Apprendre les bases
PHP 1 - Apprendre les bases
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 
Php cours
Php coursPhp cours
Php cours
 
Cours php
Cours phpCours php
Cours php
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 

Destaque

Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralGeoffrey Bachelet
 
Programmation STUPID vs SOLID (PHP Meetup)
Programmation STUPID vs SOLID (PHP Meetup)Programmation STUPID vs SOLID (PHP Meetup)
Programmation STUPID vs SOLID (PHP Meetup)Arnaud Langlade
 
Introduction au réseaux sociaux
Introduction au réseaux sociauxIntroduction au réseaux sociaux
Introduction au réseaux sociauxVincent Petetin
 
CARA Coding Dojo - SOLID
CARA Coding Dojo - SOLIDCARA Coding Dojo - SOLID
CARA Coding Dojo - SOLIDflorentpellet
 
Injection de dependances - Les bases
Injection de dependances - Les basesInjection de dependances - Les bases
Injection de dependances - Les basesOlivier Spinelli
 
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites WebHTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites WebMicrosoft
 

Destaque (7)

Les bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en généralLes bonnes pratiques de l'architecture en général
Les bonnes pratiques de l'architecture en général
 
Programmation STUPID vs SOLID (PHP Meetup)
Programmation STUPID vs SOLID (PHP Meetup)Programmation STUPID vs SOLID (PHP Meetup)
Programmation STUPID vs SOLID (PHP Meetup)
 
Injection de dépendance
Injection de dépendanceInjection de dépendance
Injection de dépendance
 
Introduction au réseaux sociaux
Introduction au réseaux sociauxIntroduction au réseaux sociaux
Introduction au réseaux sociaux
 
CARA Coding Dojo - SOLID
CARA Coding Dojo - SOLIDCARA Coding Dojo - SOLID
CARA Coding Dojo - SOLID
 
Injection de dependances - Les bases
Injection de dependances - Les basesInjection de dependances - Les bases
Injection de dependances - Les bases
 
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites WebHTML 5 et CSS3, créez, animez et enrichissez vos sites Web
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
 

Semelhante a JavaScript prise en main et fondamentaux

Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpGabriele Santini
 
Javascript pour les développeurs Java : quels sont les pièges à éviter ?
Javascript pour les développeurs Java : quels sont les pièges à éviter ?Javascript pour les développeurs Java : quels sont les pièges à éviter ?
Javascript pour les développeurs Java : quels sont les pièges à éviter ?FlorianBoulay
 
jQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesRémi Prévost
 
Persona: un système d'identité pour le Web
Persona: un système d'identité pour le WebPersona: un système d'identité pour le Web
Persona: un système d'identité pour le WebFrancois Marier
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsThomas Bassetto
 
Solution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptSolution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptRaphaël Semeteys
 

Semelhante a JavaScript prise en main et fondamentaux (20)

Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour php
 
HTML5
HTML5HTML5
HTML5
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Introduction aux interfaces.
Introduction aux interfaces.Introduction aux interfaces.
Introduction aux interfaces.
 
Javascript pour les développeurs Java : quels sont les pièges à éviter ?
Javascript pour les développeurs Java : quels sont les pièges à éviter ?Javascript pour les développeurs Java : quels sont les pièges à éviter ?
Javascript pour les développeurs Java : quels sont les pièges à éviter ?
 
jQuery — fonctionnalités avancées
jQuery — fonctionnalités avancéesjQuery — fonctionnalités avancées
jQuery — fonctionnalités avancées
 
Persona: un système d'identité pour le Web
Persona: un système d'identité pour le WebPersona: un système d'identité pour le Web
Persona: un système d'identité pour le Web
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objets
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Algo poo ts
Algo poo tsAlgo poo ts
Algo poo ts
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Solution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptSolution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScript
 

JavaScript prise en main et fondamentaux

  • 1. JavaScript Prise en main & Fondamentaux Vincent PETETIN
  • 2. Historique • Crée il y a presque 20 ans (1995), lorsque Java était à la mode sur Internet • « Java » dans « JavaScript » est purement commercial, seul la syntaxe à été pris comme concept • Typage dynamique : Scheme • Héritage par prototype : Self
  • 3. Fondamentaux • Les objets • La portée des variables (var, function) • Les fonctions • Le contexte (this)
  • 4. Fondamentaux - les objects • Dans JavaScript tout est objet • 1 objet = collection de clés/valeurs forme = { couleur: "vert", type: "carré", foo: "yahouu !" }; forme = new Object(); forme.couleur = "vert"; forme.type = "carré"; forme.foo = "yahouu !"; forme = { couleur: "vert", type: "carré", foo: "yahouu !" }; console.log(forme["couleur"]); // vert console.log(forme["type"]); // carré delete forme.foo; for (var propertyName in forme) { console.log(propertyName + ": " + forme[propertyName]); } // couleur: vert // type: carré
  • 5. Les fondamentaux – portée des variables • Portée = vision de l’interpréteur à un instant t • Portée globale (window dans un navigateur) • 1 fonction = 1 portée • « var » indique de créer une variable visible que pour la portée de création test1 = function () { var x = 1; test2 = function () { var x = 2; test3 = function () { var x = 3; console.log(x); // 3 }(); }(); console.log(x); // 1 }(); console.log(x); // undefined function genericFunctionName() { for (i = 0; i < myArray.length; i++) { console.log(i); } } for (i = 0; i < 10; i++) { genericFunctionName(); } function genericFunctionName() { for (i = 0; i < myArray.length; i++) { console.log(i); } } for (var i = 0; i < 10; i++) { genericFunctionName(); } function genericFunctionName() { for (var i = 0; i < myArray.length; i++) { console.log(i); } } for (i = 0; i < 10; i++) { genericFunctionName(); }
  • 6. Fondamentaux – portée des variables • Havre de paix (function () { var privateVariable = true; window.init = function () { console.log(privateVariable); } }()); init(); // true console.log(privateVariable); // undefined
  • 7. • 2 façons de déclarer une fonction : • Implicite (la « mauvaise » façon de faire) : • Explicite (la bonne façon de faire) : Fondamentaux – les fonctions action(); function action() { } var action = function () { }; action(); if (1 == 1) { // l'exécution du code passe ici ... function action() { console.log('a == 1'); } } else { // ... pourtant le compilateur se souvient de cette fonction function action() { console.log('a != 1'); } } action(); // a != 1 if (1 == 1) { // l'exécution du code passe ici ... action = function () { console.log('a == 1'); } } else { // ... cette méthode n'est jamais appelée car la portée à été maitrisée action = function () { console.log('a != 1'); } } action(); // a == 1
  • 8. • Auto-exécution : • JavaScript est un langage orientée prototype : les fonctions en sous le cœur • 1 fonction = 1 objet avec 1 propriété « prototype » • Opérateur new (prototype.constructor) • Héritage Fondamentaux – particularités des fonctions var autoInit = function () { console.log('hello world'); }(); // hello world var crypto = function () { this.seed = 10; this.version = "V1"; }; var myCrypto = new crypto(); console.log(myCrypto.version); // V1 var crypto = function () { } crypto.prototype.seed = 10; crypto.prototype.version = "V1"; var myCrypto = new crypto(); console.log(myCrypto.version); // V1 var crypto = function () { this.seed = 10; this.version = "V1"; }; var myCrypto = new crypto(); crypto.prototype.writeSeed = function () { console.log(this.seed); }; myCrypto.writeSeed(); // 10 String.prototype.firstChar = function() { return this[0]; } console.log("premier".firstChar()); // p
  • 9. • Différent des langages de programmation orienté Object (C++, Java,C#) • JavaScript est capable de copier le corps du fonction d’un objet à l’autre • prototype.call permet de fixer le contexte d’exécution d’une fonction Fondamentaux – le contexte (ou this) var user = function () { this.name = "vp"; this.display = function () { console.log(this.name + " !!!"); } }; var user1 = new user(); document.onclick = user1.display; // undefined !!! var user = function () { this.name = "vp"; this.display = function () { console.log(this.name + " !!!"); } }; var user1 = new user(); document.onclick = user1.display; // my document !!! document.name = "my document"; var user = function () { this.name = "vp"; this.display = function () { console.log(this.name + " !!!"); } }; var user1 = new user(); document.onclick = user1.display; // vp !!! document.onclick.call(user1); document.name = "my document";
  • 10. • Il n’y a pas de classe en JavaScript ! • JavaScript est un langage « orienté prototype » • Prototypage : • Le prototype d’une classe est sa définition Prototypage