javascript 37 lines · 7 steps

Building a Stack with private fields

A clean LIFO stack in JavaScript using a private field, chainable pushes, and a custom iterator.

Explained by highlit
1class Stack {
2 #items = [];
3 
4 push(value) {
5 this.#items.push(value);
6 return this;
7 }
8 
9 pop() {
10 if (this.isEmpty()) {
11 throw new Error("Stack underflow");
12 }
13 return this.#items.pop();
14 }
15 
16 peek() {
17 return this.#items[this.#items.length - 1];
18 }
19 
20 isEmpty() {
21 return this.#items.length === 0;
22 }
23 
24 get size() {
25 return this.#items.length;
26 }
27 
28 clear() {
29 this.#items.length = 0;
30 }
31 
32 *[Symbol.iterator]() {
33 for (let i = this.#items.length - 1; i >= 0; i--) {
34 yield this.#items[i];
35 }
36 }
37}
01 / 01
STEP 01

Walkthrough

Space play step click any line
Three takeaways
  1. 1Private fields (#) enforce true encapsulation so internal state can't be touched from outside.
  2. 2Returning this from mutating methods enables fluent, chainable call syntax.
  3. 3Implementing Symbol.iterator makes a custom class work with for...of and spread.

Related explainers

Share this explainer

Here's the card — post it anywhere.

Building a Stack with private fields — share card
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code