• Skip to main content
  • Skip to search
  • Skip to select language
MDN Web Docs
  • References
    • Overview / Web Technology

      Web technology reference for developers

    • HTML

      Structure of content on the web

    • CSS

      Code used to describe document style

    • JavaScript

      General-purpose scripting language

    • HTTP

      Protocol for transmitting web resources

    • Web APIs

      Interfaces for building web applications

    • Web Extensions

      Developing extensions for web browsers

    • Accessibility

      Build web projects usable for all

    • Web Technology

      Web technology reference for developers

  • Learn
    • Overview / MDN Learning Area

      Learn web development

    • MDN Learning Area

      Learn web development

    • HTML

      Learn to structure web content with HTML

    • CSS

      Learn to style content using CSS

    • JavaScript

      Learn to run scripts in the browser

    • Accessibility

      Learn to make the web accessible to all

  • Plus
    • Overview

      A customized MDN experience

    • AI Help

      Get real-time assistance and support

    • Updates

      All browser compatibility updates at a glance

    • Documentation

      Learn how to use MDN Plus

    • FAQ

      Frequently asked questions about MDN Plus

  • Curriculum New
  • Blog
    • Playground

      Write, test and share your code

    • HTTP Observatory

      Scan a website for free

    • AI Help

      Get real-time assistance and support

  • Log in
  • Sign up for free
  1. References
  2. JavaScript
  3. Guide
  4. Inheritance and the prototype chain
    • Deutsch
    • Español
    • Français
    • 日本語
    • 한국어
    • Português (do Brasil)
    • Русский
    • 中文 (简体)
    • 正體中文 (繁體)

In this article

  • Inheritance with the prototype chain
  • Constructors
  • Inspecting prototypes: a deeper dive
  • Different ways of creating and mutating prototype chains
  • Performance
  • Conclusion
  1. JavaScript
  2. Tutorials and guides
  3. Beginner's tutorials
    1. Your first website: Adding interactivity
    2. Dynamic scripting with JavaScript
    3. JavaScript frameworks and libraries
  4. JavaScript Guide
    1. Introduction
    2. Grammar and types
    3. Control flow and error handling
    4. Loops and iteration
    5. Functions
    6. Expressions and operators
    7. Numbers and strings
    8. Representing dates & times
    9. Regular expressions
    10. Indexed collections
    11. Keyed collections
    12. Working with objects
    13. Using classes
    14. Using promises
    15. JavaScript typed arrays
    16. Iterators and generators
    17. Internationalization
    18. Meta programming
    19. JavaScript modules
  5. Intermediate
    1. Advanced JavaScript objects
    2. Asynchronous JavaScript
    3. Client-side web APIs
    4. Language overview
    5. JavaScript data structures
    6. Equality comparisons and sameness
    7. Enumerability and ownership of properties
    8. Closures
  6. Advanced
    1. Inheritance and the prototype chain
    2. Memory Management
  7. References
  8. Built-in objects
    1. AggregateError
    2. Array
    3. ArrayBuffer
    4. AsyncFunction
    5. AsyncGenerator
    6. AsyncGeneratorFunction
    7. AsyncIterator
    8. Atomics
    9. BigInt
    10. BigInt64Array
    11. BigUint64Array
    12. Boolean
    13. DataView
    14. Date
    15. decodeURI()
    16. decodeURIComponent()
    17. encodeURI()
    18. encodeURIComponent()
    19. Error
    20. escape() Deprecated
    21. eval()
    22. EvalError
    23. FinalizationRegistry
    24. Float16Array
    25. Float32Array
    26. Float64Array
    27. Function
    28. Generator
    29. GeneratorFunction
    30. globalThis
    31. Infinity
    32. Int16Array
    33. Int32Array
    34. Int8Array
    35. InternalError Non-standard
    36. Intl
    37. isFinite()
    38. isNaN()
    39. Iterator
    40. JSON
    41. Map
    42. Math
    43. NaN
    44. Number
    45. Object
    46. parseFloat()
    47. parseInt()
    48. Promise
    49. Proxy
    50. RangeError
    51. ReferenceError
    52. Reflect
    53. RegExp
    54. Set
    55. SharedArrayBuffer
    56. String
    57. Symbol
    58. SyntaxError
    59. Temporal Experimental
    60. TypedArray
    61. TypeError
    62. Uint16Array
    63. Uint32Array
    64. Uint8Array
    65. Uint8ClampedArray
    66. undefined
    67. unescape() Deprecated
    68. URIError
    69. WeakMap
    70. WeakRef
    71. WeakSet
  9. Expressions & operators
    1. Addition (+)
    2. Addition assignment (+=)
    3. Assignment (=)
    4. async function expression
    5. async function* expression
    6. await
    7. Bitwise AND (&)
    8. Bitwise AND assignment (&=)
    9. Bitwise NOT (~)
    10. Bitwise OR (|)
    11. Bitwise OR assignment (|=)
    12. Bitwise XOR (^)
    13. Bitwise XOR assignment (^=)
    14. class expression
    15. Comma operator (,)
    16. Conditional (ternary) operator
    17. Decrement (--)
    18. delete
    19. Destructuring
    20. Division (/)
    21. Division assignment (/=)
    22. Equality (==)
    23. Exponentiation (**)
    24. Exponentiation assignment (**=)
    25. function expression
    26. function* expression
    27. Greater than (>)
    28. Greater than or equal (>=)
    29. Grouping operator ( )
    30. import.meta
      1. import.meta.resolve()
    31. import()
    32. in
    33. Increment (++)
    34. Inequality (!=)
    35. instanceof
    36. Left shift (<<)
    37. Left shift assignment (<<=)
    38. Less than (<)
    39. Less than or equal (<=)
    40. Logical AND (&&)
    41. Logical AND assignment (&&=)
    42. Logical NOT (!)
    43. Logical OR (||)
    44. Logical OR assignment (||=)
    45. Multiplication (*)
    46. Multiplication assignment (*=)
    47. new
    48. new.target
    49. null
    50. Nullish coalescing assignment (??=)
    51. Nullish coalescing operator (??)
    52. Object initializer
    53. Operator precedence
    54. Optional chaining (?.)
    55. Property accessors
    56. Remainder (%)
    57. Remainder assignment (%=)
    58. Right shift (>>)
    59. Right shift assignment (>>=)
    60. Spread syntax (...)
    61. Strict equality (===)
    62. Strict inequality (!==)
    63. Subtraction (-)
    64. Subtraction assignment (-=)
    65. super
    66. this
    67. typeof
    68. Unary negation (-)
    69. Unary plus (+)
    70. Unsigned right shift (>>>)
    71. Unsigned right shift assignment (>>>=)
    72. void operator
    73. yield
    74. yield*
  10. Statements & declarations
    1. async function
    2. async function*
    3. Block statement
    4. break
    5. class
    6. const
    7. continue
    8. debugger
    9. do...while
    10. Empty statement
    11. export
    12. Expression statement
    13. for
    14. for await...of
    15. for...in
    16. for...of
    17. function
    18. function*
    19. if...else
    20. import
      1. Import attributes
    21. Labeled statement
    22. let
    23. return
    24. switch
    25. throw
    26. try...catch
    27. var
    28. while
    29. with Deprecated
  11. Functions
    1. Arrow function expressions
    2. Default parameters
    3. get
    4. Method definitions
    5. Rest parameters
    6. set
    7. The arguments object
      1. arguments.callee Deprecated
      2. arguments.length
      3. arguments[Symbol.iterator]()
  12. Classes
    1. constructor
    2. extends
    3. Private properties
    4. Public class fields
    5. static
    6. Static initialization blocks
  13. Regular expressions
    1. Backreference: \1, \2
    2. Capturing group: (...)
    3. Character class escape: \d, \D, \w, \W, \s, \S
    4. Character class: [...], [^...]
    5. Character escape: \n, \u{...}
    6. Disjunction: |
    7. Input boundary assertion: ^, $
    8. Literal character: a, b
    9. Lookahead assertion: (?=...), (?!...)
    10. Lookbehind assertion: (?<=...), (?<!...)
    11. Modifier: (?ims-ims:...)
    12. Named backreference: \k<name>
    13. Named capturing group: (?<name>...)
    14. Non-capturing group: (?:...)
    15. Quantifier: *, +, ?, {n}, {n,}, {n,m}
    16. Unicode character class escape: \p{...}, \P{...}
    17. Wildcard: .
    18. Word boundary assertion: \b, \B
  14. Errors
    1. AggregateError: No Promise in Promise.any was resolved
    2. Error: Permission denied to access property "x"
    3. InternalError: too much recursion
    4. RangeError: argument is not a valid code point
    5. RangeError: BigInt division by zero
    6. RangeError: BigInt negative exponent
    7. RangeError: form must be one of 'NFC', 'NFD', 'NFKC', or 'NFKD'
    8. RangeError: invalid array length
    9. RangeError: invalid date
    10. RangeError: precision is out of range
    11. RangeError: radix must be an integer
    12. RangeError: repeat count must be less than infinity
    13. RangeError: repeat count must be non-negative
    14. RangeError: x can't be converted to BigInt because it isn't an integer
    15. ReferenceError: "x" is not defined
    16. ReferenceError: assignment to undeclared variable "x"
    17. ReferenceError: can't access lexical declaration 'X' before initialization
    18. ReferenceError: must call super constructor before using 'this' in derived class constructor
    19. ReferenceError: super() called twice in derived class constructor
    20. SyntaxError: 'arguments'/'eval' can't be defined or assigned to in strict mode code
    21. SyntaxError: "0"-prefixed octal literals are deprecated
    22. SyntaxError: "use strict" not allowed in function with non-simple parameters
    23. SyntaxError: "x" is a reserved identifier