poo et javascript, une notion trop incomprise
DESCRIPTION
JavaScript est un des langages les plus incompris au monde. Et notamment pour son approche particulière de la programmation objet. Je vous propose d'en faire un tour complet.TRANSCRIPT
![Page 1: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/1.jpg)
POO et JavaScriptUNE NOTION TROP INCOMPRISE
Mathieu ROBIN
![Page 2: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/2.jpg)
« The World's Most Misunderstood Programming Language »
Douglas Crockford
![Page 3: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/3.jpg)
• Mathieu ROBIN (@mathrobin)• 25 ans• Ingénieur logiciel chez Companeo• Contributeur Developpez.com, communauté francophone de développeurs• Blogueur
• http://www.mathieurobin.com• http://www.recettesensolo.com
Twitter : @mathrobin Blog : MathieuRobin.com Rédacteur / Correcteur Developpez.com Chroniqueur francophone jQuery, jQuery UI, jQuery Mobile Accessoirement cuisinier
![Page 4: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/4.jpg)
![Page 5: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/5.jpg)
Classe
Classe
Objet
Objet
Objet
Objet
Interface
![Page 6: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/6.jpg)
![Page 7: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/7.jpg)
Classe
Classe
Objet
Objet
Objet
Objet
Interface
![Page 8: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/8.jpg)
Objet
![Page 9: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/9.jpg)
NumberStringArray
FunctionObjectDate
Boolean
![Page 10: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/10.jpg)
Exceptions
![Page 11: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/11.jpg)
undefinednullNaN
infinity
![Page 12: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/12.jpg)
Tout objet a un prototype
![Page 13: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/13.jpg)
Tout objet peut servir de prototype à un autre objet
![Page 14: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/14.jpg)
Object est le pèrede tous les objets
![Page 15: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/15.jpg)
Object.prototype ---> null
![Page 16: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/16.jpg)
Bravo !
![Page 17: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/17.jpg)
![Page 18: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/18.jpg)
var objetNu = new Object();
![Page 19: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/19.jpg)
objetNu: Objectprototype: Object
constructor: function Object()hasOwnProperty()isPrototypeOf()propertyIsEnumerable()toLocaleString()toString()valueOf()
![Page 20: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/20.jpg)
![Page 21: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/21.jpg)
var monLitteral = {};
![Page 22: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/22.jpg)
var monLitteral = [];
![Page 23: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/23.jpg)
var monLitteral = {
what : 'ConFoo',
'when' : '2012',
where : 'Montréal',
why : 42,
''and-for'' : 'speaking'
};
![Page 24: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/24.jpg)
Pas besoin de ' ou de '' pour les clés Vous pouvez les utiliser quand même Exception : ''foo-bar''
Présence d'un caractère « illégal » Utilisation d'un mot réservé
• Ne s'applique plus avec EcmaScript 5
![Page 25: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/25.jpg)
Accès aux propriétés :
console.log(monLitteral.what); // ConFoo
console.log(monLitteral['when']); // 2012
console.log(monLitteral.who); // undefined
![Page 26: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/26.jpg)
Modification des propriétés :
monLitteral.what = 'Confoo' ;
monLitteral['when'] = 'Février-Mars 2012' ;
monLitteral.who = 'John Doe' ;
![Page 27: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/27.jpg)
Suppression d'une propriété :
monLitteral.what = null ;
monLitteral.when = undefined ;
delete monLitteral.who ;
![Page 28: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/28.jpg)
![Page 29: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/29.jpg)
![Page 30: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/30.jpg)
var monObjet = {
what : 'ConFoo',
when : '2012',
where : 'Montréal'
};
monObjet.sayHello = function () {
console.log('Hello ConFoo 2012 !') ;
}
![Page 31: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/31.jpg)
var sayHello = function () {
console.log('Hello ConFoo !') ;
}
function sayHello () {
console.log('Hello ConFoo !') ;
}
![Page 32: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/32.jpg)
if ( true ) {
function sayHello () {
console.log('Hello ConFoo !') ;
}
}
else {
function sayHello () {
console.log('Hello world !') ;
}
}
sayHello() ; // Hello world !
![Page 33: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/33.jpg)
![Page 34: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/34.jpg)
Tout objet a un prototype
![Page 35: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/35.jpg)
monObjet.prototype.name = 'John Doe' ;
monObjet.prototype.getName = function () {
return this.name ;
}
![Page 36: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/36.jpg)
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
![Page 37: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/37.jpg)
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
![Page 38: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/38.jpg)
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
![Page 39: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/39.jpg)
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
![Page 40: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/40.jpg)
static
héritage
privé
![Page 41: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/41.jpg)
var monObjet = {
what : 'ConFoo',
when : '2012',
where : 'Montréal',
sayHello : function () {
console.log('Hello ConFoo 2012 !') ;
}
};
![Page 42: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/42.jpg)
var monObjetBis = monObjet ;
![Page 43: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/43.jpg)
FAUX
![Page 44: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/44.jpg)
Vous avez copié une référence
![Page 45: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/45.jpg)
var ObjetPere = function () {console.log('hello');
} ;
ObjetPere.prototype.name = 'Dark Vador' ;
var objetReel = new ObjetPere();
![Page 46: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/46.jpg)
var objet = {name:'Dark Vador'
} ;var fils = Object.create(objet) ;
![Page 47: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/47.jpg)
Privé
![Page 48: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/48.jpg)
function Container () { var secret = 3; function dec () { return secret; } this.getSecret = function () { return dec(); }}var test = new Container() ;console.log( test.secret ) ; //undefinedconsole.log( test.getSecret() ) ; //3
![Page 49: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/49.jpg)
Crédits PhotosDarin McClure : http://www.flickr.com/photos/darinrmcclure
Geekphysical : http://www.flickr.com/photos/geekphysical
Marc Wathieu : http://www.flickr.com/photos/marcwathieu
Theresa Thompson : http://www.flickr.com/photos/theresasthompson
Esparta Palma : http://www.flickr.com/photos/esparta
Maria Reyes-McDavis : http://www.flickr.com/photos/mariareyesmcdavis
Denis Vahrushev : http://www.flickr.com/photos/dvahrushev
Shadowgate : http://www.flickr.com/photos/shadowgate
Eschipul : http://www.flickr.com/photos/eschipul
Eleaf : http://www.flickr.com/photos/eleaf
![Page 50: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/50.jpg)
https://joind.in/6084
http://www.slideshare.net/mathrobin/poo-et-java-script-notion-trop-incomprise
![Page 51: Poo et JavaScript, une notion trop incomprise](https://reader035.vdocuments.mx/reader035/viewer/2022070316/5560b1d6d8b42afe3b8b4673/html5/thumbnails/51.jpg)