Apparition des premières bibliothèques de développement
JavaScript n'a rien a voir avec Java.
Nom choisi pour des raisons marketing, pour conférer à JavaScript un peu de l'aura de Java.
La syntaxe donne l'impression que JavaScript est similaire à Java ou C++.
for (i = 0; i < 10; i++) {
myArray[i] = new Stuff();
}
impression : JavaScript ressemble à Java ou C++
réalité : JavaScript est très différent de ces langages
this
var myVar = 42;
myVar = "Bonjour !";
log(myVar);
var myObject = {
name: "JavaScript",
greet: function() {
// définition de méthode
log("Hello " + this.name);
}
};
myObject.greet();
Des fonctions ordinaires invoquée avec le mot clé new
.
function MyConstructor() {
this.name = "JavaScript";
this.greet = function() {
log("Hello " + this.name);
};
}
myObject = new MyConstructor();
myObject.greet();
function ParentContructor() {
this.name = "everyone";
this.greet = function() {
log("Hello " + this.name);
};
}
function ChildContructor() {
this.name = "JavaScript";
}
ChildContructor.prototype = new ParentContructor();
myObject = new ChildContructor();
myObject.greet();
this
var myObject = {
firstName: "JavaScript",
greet: function() {
log("Hello " + this.firstName);
}
};
function callingFunction(callback) {
callback();
}
callingFunction(myObject.greet);
var myVar;
setTimeout(function() {
myVar = 2;
}, 2000);
log(myVar);
function makeMultiplier(factor) {
return function(number) {
return number * factor;
};
}
var doubler = makeMultiplier(2);
var doubles = [1, 2, 3].map(function(number) {
return doubler(number);
});
log(doubles);
var myVar = 2;
if (true) {
var myVar = 3;
}
log(myVar);
var myVar = 2;
function assignMyVar() {
var myVar = 3;
}
if (true) {
assignMyVar();
}
log(myVar);
log("0" == 0);
log("true" == true);
// http://www.wtfjs.com/2013/02/21/why-am-i-a-number
log("Why am I a " + typeof + "");
Ceci crée une variable globale :
function myFunc() {
myUglyGlobal = 42;
}
myFunc();
log(myUglyGlobal);
<script src="http://example.com/some-other-script.js"></script>
<script src="my-own-script.js"></script>
À causes des défauts, réels ou ressentis, de JavaScript, de nombreux langages qui compilent en JavaScript ont été créés:
Problèmes : ajoute une couche de complexité, complique le déboguage (même si on a maintenant les source maps), besoin de traduire mentalement les docs de bibliothèques, etc.
var
bind
pour lier this
à un objet"use strict";
// Revealing module pattern
var module = (function() {
function myFunction() {
log("éxécution de myFunction");
}
return {
myFunction: myFunction
}
}());
module.myFunction();
var
systématiquementfunction f() {
myGlobal = "Je suis globale.";
var myLocal = "Je suis locale.";
log(myGlobal + " " + myLocal);
}
f();
log(typeof myGlobal);
log(typeof myLocal);
log("0" == 0);
log("0" === 0);
var squares = [1, 2, 3].map(function(number) {
return number * number;
});
log(squares);
var sum = [1, 2, 3].reduce(function(number, accumulator) {
return accumulator + number;
}, 0);
log(sum);
Plus d'infos :
bind
pour fixer this
var myObject = {
firstName: "JavaScript",
greet: function() {
log("Hello " + this.firstName);
}
};
function callingFunction(callback) {
callback();
}
callingFunction(myObject.greet.bind(myObject));
"use strict";
(function() {
"use strict";
myVar = 42;
log(myVar);
}());
// Erreur dans la console :
// ReferenceError: assignment to undeclared variable myVar
(function() {
"use strict";
var myVar = 42;
log(myVar);
}());
ECMAScript 6 apporte des solutions à certains problèmes évoqués précédemment.
Rappel du problème avec this
et les fonctions normales :
function MyConstructor() {
this.firstName = "JavaScript";
this.greet = function() {
log("Hello " + this.firstName);
};
}
function functionCaller(callback) {
callback();
}
var myObj = new MyConstructor();
functionCaller(myObj.greet);
Solution avec une fonction flèche :
function MyConstructor() {
this.firstName = "JavaScript";
this.greet = () => {
log("Hello " + this.firstName);
};
}
function functionCaller(callback) {
callback();
}
var myObj = new MyConstructor();
functionCaller(myObj.greet);
Définition d'un module :
// modules/helper.js
export function arrayToString(param) {
// some implementation
}
Et utilisation :
// application.js
import { arrayToString } from 'modules/helpers';
Tiré de Javascript ES6: Learn important features in a few minutes
class Project {
constructor(name) {
this.name = name;
}
start() {
return "Project " + this.name + " starting";
}
}
var project = new Project("Journal");
project.start(); // "Project Journal starting"
let
const
yield
ES6 déjà en partie disponible dans les navigateurs et utilisable grâce à des transpilers comme Babel.
Table of Contents | t |
---|---|
Exposé | ESC |
Full screen slides | e |
Presenter View | p |
Source Files | s |
Slide Numbers | n |
Toggle screen blanking | b |
Show/hide slide context | c |
Notes | 2 |
Help | h |