const Stack = (() => {
// 使用 weakmap 封装私有变量
const store = new WeakMap();
class Stack {
constructor() {
store.set(this, { _items: [] });
}
// 大小 只读
get size() {
return store.get(this)._items.length;
}
// 是否为空 只读
get isEmpty() {
return this.size === 0;
}
// 入栈
push(ele) {
const privates = store.get(this);
privates._items.push(ele);
return this.size;
}
// 出栈
pop() {
return store.get(this)._items.pop();
}
// 返回栈顶元素
peek() {
const _items = store.get(this)._items;
return _items[_items.length - 1];
}
// 默认迭代器 展示所有元素
[Symbol.iterator]() {
let i = 0;
return {
next: () => ({ value: store.get(this)._items[i], done: i++ === this.size }),
[Symbol.iterator]() {
return this;
},
};
}
// 重置
clear() {
store.get(this)._items = [];
}
}
return Stack;
})();