Objets Javascript et prototype

Le type « objet »

// Ce type peut contenir des variables de tous les types, y compris sous-objets.
let informations = {
  prenom: 'Fabien',
  annee_naissance: 1987,
  permis: [B],
  vehicule: true,
  favoris: {
    couleur: 'bleu',
    saison: 'printemps'
  },
};

// On peut accéder à une valeur via les clés :
console.log(informations.favoris.couleur); // Affiche "bleu"

// Mais également par les clés entre quotes et crochets, s'il s'agit de variables dynamiques par exemple :
console.log(informations['favoris']['couleur']); // Affiche "bleu"

let search_data = 'couleur';
console.log(informations['favoris'][search_data]); // Affiche "bleu"

Définition d’un objet, présentation de prototype

En Javascript un objet est une fonction. Une fonction qui correspondrait à une classe dans d’autres langages et dont le nom est le nom de l’objet. La fonction est donc le constructeur de l’objet. Elle peut recevoir des paramètres. Cette fonction peut contenir des fonctions anonymes pour compléter fonctionnellement l’objet.

function Person(nick, age, sex, parent, work, friends) {
    this.nick = nick;
    this.age = age;
    this.sex = sex;
    this.parent = parent;
    this.work = work;
    this.friends = friends;
 
    this.addFriend = function(nick, age, sex, parent, work, friends) {
        this.friends.push(new Person(nick, age, sex, parent, work, friends));
    };
}

Nous avons ici un objet Person qui reçoit plusieurs paramètres et qui dispose d’une fonction addFriend.

La description de l’objet (ses paramètres et leur affectation) peut être dissociée de la description des méthodes via prototype. Tout objet Javascript dispose automatiquement d’un sous-objet prototype qui permet de définir les méthodes de l’objets dans un fichier Javascript séparé.

Person.prototype.addFriend = function(nick, age, sex, parent, work, friends) {
    this.friends.push(new Person(nick, age, sex, parent, work, friends));
}

Notre objet aura été défini dans un premier fichier avec simplement ses attributs mais sans aucune fonction. La fonction aura quant à elle été définie dans un second fichier.

Note : Javascript dispose du mot-clé instanceof qui permet de tester une instance d’objet.