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
POO et JavaScriptUNE NOTION TROP INCOMPRISE
Mathieu ROBIN
« The World's Most Misunderstood Programming Language »
Douglas Crockford
• 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
Classe
Classe
Objet
Objet
Objet
Objet
Interface
Classe
Classe
Objet
Objet
Objet
Objet
Interface
Objet
NumberStringArray
FunctionObjectDate
Boolean
Exceptions
undefinednullNaN
infinity
Tout objet a un prototype
Tout objet peut servir de prototype à un autre objet
Object est le pèrede tous les objets
Object.prototype ---> null
Bravo !
var objetNu = new Object();
objetNu: Objectprototype: Object
constructor: function Object()hasOwnProperty()isPrototypeOf()propertyIsEnumerable()toLocaleString()toString()valueOf()
var monLitteral = {};
var monLitteral = [];
var monLitteral = {
what : 'ConFoo',
'when' : '2012',
where : 'Montréal',
why : 42,
''and-for'' : 'speaking'
};
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
Accès aux propriétés :
console.log(monLitteral.what); // ConFoo
console.log(monLitteral['when']); // 2012
console.log(monLitteral.who); // undefined
Modification des propriétés :
monLitteral.what = 'Confoo' ;
monLitteral['when'] = 'Février-Mars 2012' ;
monLitteral.who = 'John Doe' ;
Suppression d'une propriété :
monLitteral.what = null ;
monLitteral.when = undefined ;
delete monLitteral.who ;
var monObjet = {
what : 'ConFoo',
when : '2012',
where : 'Montréal'
};
monObjet.sayHello = function () {
console.log('Hello ConFoo 2012 !') ;
}
var sayHello = function () {
console.log('Hello ConFoo !') ;
}
function sayHello () {
console.log('Hello ConFoo !') ;
}
if ( true ) {
function sayHello () {
console.log('Hello ConFoo !') ;
}
}
else {
function sayHello () {
console.log('Hello world !') ;
}
}
sayHello() ; // Hello world !
Tout objet a un prototype
monObjet.prototype.name = 'John Doe' ;
monObjet.prototype.getName = function () {
return this.name ;
}
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
Object
Objet A Objet CObjet B
Objet A1 Objet A2 Objet A3
static
héritage
privé
var monObjet = {
what : 'ConFoo',
when : '2012',
where : 'Montréal',
sayHello : function () {
console.log('Hello ConFoo 2012 !') ;
}
};
var monObjetBis = monObjet ;
FAUX
Vous avez copié une référence
var ObjetPere = function () {console.log('hello');
} ;
ObjetPere.prototype.name = 'Dark Vador' ;
var objetReel = new ObjetPere();
var objet = {name:'Dark Vador'
} ;var fils = Object.create(objet) ;
Privé
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
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
https://joind.in/6084
http://www.slideshare.net/mathrobin/poo-et-java-script-notion-trop-incomprise