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
‹ swipe to step through ›
Walkthrough
Space play
←→ step
click any line
Three takeaways
- 1Private fields (#) enforce true encapsulation so internal state can't be touched from outside.
- 2Returning this from mutating methods enables fluent, chainable call syntax.
- 3Implementing Symbol.iterator makes a custom class work with for...of and spread.
Related explainers
javascript
'use server' import { revalidatePath } from 'next/cache' import { redirect } from 'next/navigation'
How a Next.js Server Action updates a post
server-actions
authorization
validation
Intermediate
7 steps
php
<?php namespace App\Support;
Locale-aware formatting with PHP's intl extension
internationalization
encapsulation
constructor-injection
Intermediate
7 steps
python
from collections.abc import Mapping from typing import Any, Iterator
Flattening nested config into dotted keys
recursion
generators
tree-traversal
Intermediate
7 steps
javascript
const express = require('express'); const v1 = express.Router();
Versioning an API with Express Routers
api versioning
routing
modularity
Intermediate
10 steps
python
import csv import io from datetime import datetime
Streaming a CSV export in Flask
streaming
generators
csv
Intermediate
9 steps
go
package cache import ( "container/list"
Building a generic LRU cache in Go
lru-cache
generics
linked-list
Intermediate
8 steps
Share this explainer
Here's the card — post it anywhere.
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code
Embed this explainer
Drop the interactive walkthrough into a blog or docs. Views never cost a credit.
<iframe src="https://highlit.co/explainers/building-a-stack-with-private-fields-explained-javascript-5d42/embed?autoplay=1" width="100%" height="520" loading="lazy" style="border:0"></iframe>
Autoplay is on by default — add ?autoplay=0 to start paused.