Poo et JavaScript, une notion trop incomprise

Post on 23-May-2015

4.473 views 0 download

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 of Poo et JavaScript, une notion trop incomprise

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