13. Historique court
● Né pendant la guerre (95)
● En quelques semaines
● Influence Java, Erlang, Lisp, Python
IE et Netscape d'accord pour
EcmaScript 3
61. Interface publique
(function(){ // début de scope local
// accès global au constructeur
MY.utils.XHR = function( url ) {
this.url = url;
};
// méthodes ou variable statiques
MY.utils.XHR.staticVariable = true;
})(); // fin de scope local
62. Raccourci
(function(){ // début de scope local
// raccourci vers le namespace
utilisé
var self = MY.utils.XHR;
self.staticVariable = true;
})(); // fin de scope local
63. privées communes
(function(){ // début de scope local
// accès global au constructeur
MY.utils.XHR = function( url ) {
this.url = url;
currentInstances.push( this );
};
var currentInstances = [];
})(); // fin de scope local
64. privées par instance
(function(){ // début de scope local
// accès global au constructeur
MY.utils.XHR = function( url ) {
var isConnecting = true;
return {
query:function() {
if( isConnecting)
return false;
}
}
};
})(); // fin de scope local
65. Combo : factory pattern
(function(){
MY.utils.XHR = function( ) {
throw new Error( 'please use .getInstance()' );
};
// constructeur privé
var XHR = function(url) { console.log(url); };
// liste privée
var currentInstances = {};
// factory
MY.utils.XHR.getInstance = function( url ) {
if(currentInstances[url])
return currentInstances[url];
else
return currentInstances[url] = new XHR( url);
}
})();
66. Tout est émulable
● programmation événementielle
● tests unitaires et fonctionnels
● patterns classiques : MVC, observer,
facade, proxy, singleton, factory ...
67. Conclusion
● Javascript est différent, apprenez le
● OOP réutilisable