考虑到具有私有属性的对象创建模式,一种方法是:
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(){//...}
}
这里的问题:我们失去了列表和索引的隐私。
有没有办法让我们可以在实例之间重用方法和属性的隐私?
我知道我们可以将这个用于不对对象的任何状态进行操作的方法,但我更多地谈论的是那些对状态进行操作的方法。