Docs
Module-10-Objects
Module 10: Objects in JavaScript
π Overview
Objects are the foundation of JavaScript. Almost everything in JavaScript is an object, from arrays to functions to the DOM. Understanding objects deeply is essential for mastering JavaScript.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β OBJECTS IN JAVASCRIPT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β EVERYTHING IS AN OBJECT* β β
β β β β
β β Arrays β Object with numeric keys + special methods β β
β β Functions β Object with [[Call]] internal method β β
β β RegExp β Object representing patterns β β
β β Date β Object wrapping timestamps β β
β β Error β Object with stack trace β β
β β DOM nodes β Objects representing HTML elements β β
β β β β
β β *Primitives (string, number, boolean, null, undefined, symbol, β β
β β bigint) are NOT objects, but have object wrappers β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β OBJECT ANATOMY: β
β β
β const person = { ββββββββββββββββββββββββββββββββββββββββββββ β
β name: "Alice", β KEY VALUE β β
β age: 30, β βββββββββββββββββββββββββββββββββββββββββ β
β greet() { β "name" β "Alice" β β
β return "Hi!"; β "age" β 30 β β
β } β "greet" β function() {...} β β
β }; ββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [[Prototype]] βββΆ Object.prototype βββΆ null β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π― Why Objects Matter
| Concept | Real-World Use |
|---|---|
| Object Basics | Store and organize data |
Methods & this | Create behaviors attached to data |
| Property Descriptors | Control property behavior (immutability, visibility) |
| Prototypes | Inheritance, sharing methods efficiently |
| Object Patterns | Build reusable, maintainable code |
π Module Contents
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MODULE 10: OBJECTS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 10.1 OBJECT BASICS β β
β β ββββββββββββββββββ β β
β β β’ Object literal syntax { key: value } β β
β β β’ Properties vs methods β β
β β β’ Dot notation vs bracket notation β β
β β β’ Computed property names [expression]: value β β
β β β’ Shorthand property/method syntax β β
β β β’ Property existence checking (in, hasOwnProperty) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 10.2 OBJECT METHODS & THIS β β
β β ββββββββββββββββββββββββββ β β
β β β’ Methods defined in objects β β
β β β’ How `this` is determined (call site, not definition) β β
β β β’ Implicit vs explicit binding (call, apply, bind) β β
β β β’ Arrow functions and lexical `this` β β
β β β’ Method borrowing β β
β β β’ Common `this` pitfalls β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 10.3 PROPERTY DESCRIPTORS β β
β β βββββββββββββββββββββββββ β β
β β β’ Data properties vs accessor properties β β
β β β’ Attributes: writable, enumerable, configurable β β
β β β’ Object.defineProperty() / defineProperties() β β
β β β’ Object.getOwnPropertyDescriptor() β β
β β β’ Getters and setters β β
β β β’ Making properties read-only or hidden β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 10.4 OBJECT STATIC METHODS β β
β β ββββββββββββββββββββββββββ β β
β β β’ Object.keys(), values(), entries() β β
β β β’ Object.assign() and spread operator β β
β β β’ Object.freeze(), seal(), preventExtensions() β β
β β β’ Object.fromEntries() β β
β β β’ Shallow vs deep cloning β β
β β β’ structuredClone() for deep clones β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 10.5 PROTOTYPES β β
β β βββββββββββββββ β β
β β β’ [[Prototype]] internal slot β β
β β β’ __proto__ accessor (deprecated but useful for learning) β β
β β β’ Object.create() - create with specific prototype β β
β β β’ Object.getPrototypeOf() / setPrototypeOf() β β
β β β’ Prototype chain and property lookup β β
β β β’ Shadowing properties β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 10.6 OBJECT PATTERNS β β
β β ββββββββββββββββββββ β β
β β β’ Factory functions (return new objects) β β
β β β’ Constructor functions (use with new) β β
β β β’ Object composition over inheritance β β
β β β’ Mixins for sharing behavior β β
β β β’ Module pattern with closures β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 10.7 ADVANCED: Object.fromEntries & Transformations β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β’ Converting between objects and arrays β β
β β β’ Object transformation pipelines β β
β β β’ Object filtering, mapping operations β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Key Concepts Preview
The this Keyword
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β THIS BINDING RULES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β `this` is determined by HOW a function is CALLED, not where defined β
β β
β ββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Call Type β What `this` equals β β
β ββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β obj.method() β obj (implicit binding) β β
β β func.call(x) β x (explicit binding) β β
β β func.apply(x) β x (explicit binding) β β
β β func.bind(x)() β x (hard binding) β β
β β new Func() β new object being created β β
β β func() β undefined (strict) / window (non-strict) β β
β β () => {} β lexical (inherits from outer scope) β β
β ββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β PRIORITY: new > call/apply/bind > obj.method > default β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Prototype Chain
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROTOTYPE CHAIN β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β const animal = { eats: true }; β
β const dog = Object.create(animal); β
β dog.barks = true; β
β β
β ββββββββββββββββ ββββββββββββββββ βββββββββββββββββββββ β
β β dog β β animal β β Object.prototype β β
β β ββββββββββ β β ββββββββββ β β βββββββββββββββββ β β
β β barks:true ββββββΆβ eats: true ββββββΆβ toString() βββββΆ null β
β β β β β β hasOwnProperty() β β
β ββββββββββββββββ ββββββββββββββββ β valueOf() β β
β [[Prototype]] [[Prototype]] βββββββββββββββββββββ β
β β
β dog.eats; // true (found in animal) β
β dog.barks; // true (found in dog) β
β dog.toString(); // "[object Object]" (found in Object.prototype) β
β dog.fly; // undefined (not found anywhere) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Object Immutability
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β OBJECT IMMUTABILITY LEVELS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β LEAST ββββββββββββββββββββββββββββββββββββΆ MOST β β
β β β β
β β preventExtensions() seal() freeze() β β
β β βββββββββββββββββ ββββββ ββββββββ β β
β β Can't add new props Can't add/delete Can't add/delete β β
β β CAN delete props CAN modify values CAN'T modify values β β
β β CAN modify values Configurable=false Writable=false β β
β β β β
β β ββββββββββββββββββββ¬ββββββββββββ¬βββββββββββ¬ββββββββββββββββββββ β β
β β β Action β Prevent β Seal β Freeze β β β
β β ββββββββββββββββββββΌββββββββββββΌβββββββββββΌββββββββββββββββββββ€ β β
β β β Add property β β β β β β β β β
β β β Delete property β β
β β β β β β β
β β β Modify value β β
β β
β β β β β
β β β Reconfigure β β
β β β β β β β
β β ββββββββββββββββββββ΄ββββββββββββ΄βββββββββββ΄ββββββββββββββββββββ β β
β β β β
β β β οΈ All are SHALLOW - nested objects are NOT frozen! β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Prerequisites
Before starting this module:
- β’β Module 5: Functions (especially closures)
- β’β
Module 12: Execution Context (for
thisbinding)
π Learning Path
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RECOMMENDED ORDER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β FUNDAMENTALS (Start Here) β
β βββ 10.1 Object Basics β
β βββ 10.2 Object Methods & this β
β β
β PROPERTIES (Control & Inspect) β
β βββ 10.3 Property Descriptors β
β βββ 10.4 Object Static Methods β
β β
β INHERITANCE (Deep Understanding) β
β βββ 10.5 Prototypes β
β βββ 10.6 Object Patterns β
β β
β ADVANCED β
β βββ 10.7 Object.fromEntries & Advanced β
β β
β ESTIMATED TIME: 5-7 hours β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Key Takeaways
After completing this module, you will:
| Skill | Description |
|---|---|
| Create Objects | Use literals, factories, constructors |
| Control Properties | Use descriptors for immutability |
Master this | Predict binding in any context |
| Use Prototypes | Implement inheritance patterns |
| Apply Patterns | Choose right pattern for the task |
π Related Modules
- β’Module 5: Functions - Closures used in object patterns
- β’Module 11: Classes - ES6 class syntax (prototype sugar)
- β’Module 12: Execution Context - Deep
thisunderstanding - β’Module 22: Design Patterns - Advanced object patterns