FONCTION CONSTRUCTEUR :

function Person (name, age) {
	this.name = name;
	this.age = age;
	this.sePresente = () => {
		console.log("Hello je m'appelle " + this.name);
	}
}

Pour créer une nouvelle instance de Person on utilise :

const cyril = new Person ("Cyril", 22);
const lison = new Person ("Lison", 23);
cyril.sePresente();
lison.sePresente();

Les fonctions constructeur permettent de définir un moule et de créer plusieurs instances à partir de ce moule.

Si on veux rajouter des méthodes dans notre fonction constructeur il faut éviter de les déclarer directement dans la fonction, c'est peu efficace car chaque nouvelle instance contiendra une copie de la méthode.

Pour bien faire il faut les ajouter au prototype de notre fonction constructeur :

function Person (name, age) {
	this.name = name;
	this.age = age;
}

Person.prototype.sePresente = function() {
	console.log("Hello, je suis " + this.name)
}

Pour tester si un objet contient une propriété on peux utiliser :

cyril.hasOwnProperty('name');

⇒ boolean ( true or false )

LA CHAINE DES PROTOTYPES :

function Person(name, age) {
	this.name = name;
	this.age = age;
	this.present = function() {
		console.log("Mon nom est " + this.name)
	}
}

Person.prototype.present = function () {
	console.log("hello, my name is " + this.name)
}

let cyril = new Person("cyril", 22);
cyril.present();

⇒ Mon nom est cyril , alors pourquoi est-ce que j'ai ce résultat ?

Chaine des prototypes : cyril ⇒ Person.prototype ⇒ Object.prototype

Si j’exécute une méthode sur cyril et que je ne la trouve pas, je vais chercher plus loin dans la chaîne.

En l’occurrence dans l'exemple la méthode est déclarée dans la function constructeur de Cyril donc il renvoi "mon nom est Cyril" si c’était déclaré ailleurs il serait aller chercher dans Person.prototype

function Person(name, age) {
    	this.name = name;
    	this.age = age;
    	//this.present = function() {
    		//console.log("Mon nom est " + this.name)
    	//}
    }
    
    Person.prototype.present = function () {
    	console.log("hello, my name is " + this.name)
    }
    
    let cyril = new Person("cyril", 22);
    cyril.present();