Учитывая шаблоны создания объектов с частными свойствами, один из способов:
function MyStack (){
var list = [],
index = 0;
this.push = function(val){
return list[index++] = val;
};
this.pop = function(){// ...}
}
var stack1 = new MyStack(); stack1.push(5);
var stack2 = new MyStack(); stack2.push(11);
Проблема с этим: у каждого экземпляра Stack есть своя копия методов push и pop.
Другой способ реализации метода-конструктора:
function MyStack(){
this.list = [];
this.index = 0;
}
MyStack.prototype = {
insert: function(val){
return this.list[this.index++] = val;
},
pop:function(){//...}
}
Проблема здесь: мы теряем конфиденциальность списка и индекса.
Есть ли способ, чтобы мы могли использовать оба метода для повторного использования среди экземпляров и конфиденциальности свойств?
Я понимаю, что мы можем использовать это для методов, которые не работают ни в каком состоянии объекта, но я больше говорю о тех методах, которые работают с состоянием.