La notion d'objet dans JavaScript est assez simple. Il s'agit d'un ensemble de variables (propriétés) associé à des fonctions (méthodes).
On appelle propriétés d'un objet l'ensemble des attributs le décrivant.
On appelle méthodes d'un objet les fonctions spécifiques qui peuvent agir sur cet objet contrairement aux fonctions génériques qui peuvent agir sur plusieurs objets et/ou types primitifs.
Les objets sont en fait des variables complexes dans le sens qu'ils peuvent contenir plusieurs variables (y compris d'autres objets) tandis que les variables de type primitif ne contiennent qu'une seule valeur (sauf les tableaux). Cette différence modifie le comportement de l'interpréteur lors de l'appel des fonctions dans le sens suivant:
Pour un type primitif une copie de la valeur est transmise à la fonction. Celle-ci ne peut donc pas en modifier la valeur. On appelle ça la transmission par valeur.
Pour un objet une référence (adresse) est transmise à la fonction qui peut alors en modifier la valeur. On appelle ça la transmission par référence.
De façon à éviter la prolifération d'objets et donc de propriétés et de méthodes pour chacune des utilisations dont on aurait besoin on peut utiliser ce qu'on appelle en POO (Programmation orientée objet) le concept de classe. En JavaScript cela se traduit par l'utilisation d'une propriété particulière des fonctions appelée prototype et d'une variable spéciale appelée this. Lorsque qu'une fonction fait appel à cette variable on l'appelle un constructeur d'objet.
Dans les cas simples il est possible de déclarer directement un objet à l'aide de la syntaxe suivante:
var objet_vide = {};
var individu = { nom: 'Jean-Claude', age = 'vieux' };
var personne = { nom: 'Jean-Claude',
anniversaire: {
jour: 27,
mois: 10,
annee: 1951
}
};
Les types primitifs peuvent être traités comme des objets en utilisant leurs constructeurs. Par exemple:
var logique = new Boolean("True");
var nombre = new Number("1939");
var chaine = new String("Une chaîne de caractères");
En fait cela n'offre pas beaucoup d'intérêt pour les types boolean et number. Dans le cas du type string l'interpréteur convertira automatiquement le type primitif en objet au besoin, alors ...
Il est important de savoir que les tableaux et les fonctions sont aussi des objets et qu'ils peuvent être créés de la même manière. En fait, les tableaux et les objets sont à peu près interchangable.
var plus = new Function("a, b", "return (a + b);");
var tableau = new Array(5);
En regardant avec un peu de recul on réalise que toute donnée ou fonction constitue un objet dans JavaScript. On constate aussi que tous les objets sont contenus dans d'autres objets. Cela s'arrête avec un objet spécial appelé Object, global ou natif. Cet objet contient la propriété prototype et les cinq méthodes suivantes:
ToSource() qui retourne le littéral équivalent
ToString() qui retournr une chaîne représentant l'objet
Valueof() qui retourne la valeur primitive de l'objet
Watch() qui surveille un changement et exécute une fonction déterminée
Unwatch() qui désactive la fonction de surveillance
En plus de l'objet Object il existe trois autres objets natifs:
Math qui permet à tout moment les traitements mathématiques
Date qui permet le traitement du temps
RegExp qui perment l'utilisation des expressions régulières
Lorsque JavaScript est exécuté par un navigateur plusieurs objets prédéfinis sont ajoutés: le navigateur lui-même, le document et tout ce qu'il contient. Nous y reviendrons plus tard.
Le paragraphe 5.2 de votre manuel.