Static Members
Static Members
Section titled “Static Members”Introduction
Section titled “Introduction”Static methods and static fields belong to the class itself, not to instances. They are called on the class: ClassName.method() instead of instance.method().
Static Methods
Section titled “Static Methods”class MathUtils { static add(a, b) { return a + b; }
static multiply(a, b) { return a * b; }}
// Called on the class, not an instanceconsole.log(MathUtils.add(2, 3)); // 5console.log(MathUtils.multiply(4, 5)); // 20
// ❌ Cannot call on instancesconst utils = new MathUtils();console.log(utils.add(2, 3)); // TypeError: utils.add is not a functionStatic Fields
Section titled “Static Fields”class Config { static VERSION = '1.0.0'; static MAX_RETRIES = 3; static DEFAULT_TIMEOUT = 5000;}
console.log(Config.VERSION); // '1.0.0'console.log(Config.MAX_RETRIES); // 3console.log(Config.DEFAULT_TIMEOUT); // 5000Static vs Instance
Section titled “Static vs Instance”flowchart TB subgraph "Class (Config)" A["Static Members\nVERSION, MAX_RETRIES\ncreateDefault()"] end
subgraph "Instances" B["instance1\nname: 'Alice'"] C["instance2\nname: 'Bob'"] end
A -.->|"Config.VERSION"| D["Shared across all instances"] B -.->|"instance1.name"| E["Unique per instance"] C -.->|"instance2.name"| Ethis in Static Methods
Section titled “this in Static Methods”Inside a static method, this refers to the class:
class Calculator { static PI = 3.14159;
static circleArea(radius) { return this.PI * radius * radius; // this = Calculator }
static create() { return new this(); // creates new Calculator instance }}
console.log(Calculator.circleArea(5)); // 78.53975const calc = Calculator.create(); // new Calculator()Static Inheritance
Section titled “Static Inheritance”Static members are inherited:
class Parent { static greet() { return 'Hello from Parent'; } static ID = 'parent';}
class Child extends Parent {}
console.log(Child.greet()); // 'Hello from Parent'console.log(Child.ID); // 'parent'Practical Use Cases
Section titled “Practical Use Cases”// 1. Factory methodsclass User { constructor(name) { this.name = name; }
static createAnonymous() { return new User('Anonymous'); }
static createAdmin() { return new User('Admin'); }}
const anon = User.createAnonymous();const admin = User.createAdmin();
// 2. Utility/helper methodsclass Validator { static isEmail(str) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str); }
static isUrl(str) { try { new URL(str); return true; } catch { return false; } }}
console.log(Validator.isEmail('test@email.com')); // trueconsole.log(Validator.isUrl('https://example.com')); // trueBest Practices
Section titled “Best Practices”- Use statics for utility functions related to the class
- Use statics for factory methods (alternative constructors)
- Use static fields for configuration constants
- Avoid storing mutable data in static fields (shared across all instances)
Summary
Section titled “Summary”- Static members belong to the class, not instances
- Access them as
ClassName.method()orClassName.field thisin static methods refers to the class- Static members are inherited by subclasses
- Useful for utilities, factories, and configuration