Les propriétés et les méthodes qui sont définies dans la fonction du constructeur sont les propriétés de cet objet. Elles ne sont pas partagées entre les instances.
La règle simple est la suivante
Tout ce qui est ajouté sur this
l'instance à l'intérieur de la fonction constructeur est privée à cette instance
Vous pouvez utiliser Object.is()
pour comparer si différentes instances pointent vers la même méthode.
Votre code :
function Stack() {
this.stac = new Array();
this.pop = function () {
return this.stac.pop();
}
this.push = function (item) {
console.log('In push');
this.stac.push(item);
}
}
var stack = new Stack(),
stack2 = new Stack();
console.log(Object.is(stack.push, stack2.push)); // false
Voie recommandée :
Il est recommandé d'ajouter les propriétés et méthodes communes partagées sur le prototype. Ces propriétés et méthodes sont partagées entre les instances de l'objet.
function Stack2() {
this.stack = new Array();
}
Stack2.prototype.pop = function () {
return this.stack.pop();
};
Stack2.prototype.push = function (item) {
console.log('In push');
this.stack.push(item);
}
var stack = new Stack2(),
stack2 = new Stack2();
console.log(Object.is(stack.push, stack2.push)); // true