The prototype chain helps JavaScript objects share features like properties and functions. It works like a family tree where objects can borrow things from their parents.
Prototype chain in Javascript
object.__proto__ // or Object.getPrototypeOf(object)
__proto__ is a way to access an object's prototype, but it's better to use Object.getPrototypeOf() for clarity.
The prototype chain ends when an object has null as its prototype.
child object does not have greet itself, so JavaScript looks up the prototype chain to parent and finds it.const parent = { greet() { return 'Hello'; } }; const child = Object.create(parent); console.log(child.greet());
toString from Array.prototype through the prototype chain.const arr = []; console.log(arr.toString());
parent is the prototype of child.console.log(Object.getPrototypeOf(child) === parent);
Here, dog does not have its own speak method, so it uses the one from animal via the prototype chain.
const animal = { speak() { return `${this.name} makes a sound.`; } }; const dog = Object.create(animal); dog.name = 'Buddy'; console.log(dog.speak());
Every object in JavaScript has a prototype except the base object which has null as its prototype.
Changing the prototype of an object after creation is possible but can slow down your code, so it's best to set it when creating the object.
Use Object.create() to create a new object with a specific prototype easily.
The prototype chain lets objects share properties and methods.
JavaScript looks up the chain to find missing properties or methods.
Use Object.create() and Object.getPrototypeOf() to work with prototypes clearly.
Practice
Solution
Step 1: Understand prototype chain purpose
The prototype chain allows objects to share properties and methods by linking them.Step 2: Identify correct description
Sharing properties and methods matches the prototype chain's role, unlike other options.Final Answer:
Sharing properties and methods between objects -> Option AQuick Check:
Prototype chain = Sharing properties and methods [OK]
- Thinking it creates variables
- Assuming it speeds up code
- Believing it stops code
Solution
Step 1: Recall Object.create syntax
Object.create(prototypeObj) creates a new object with prototypeObj as its prototype.Step 2: Check other options
Other options use incorrect syntax or methods that don't exist.Final Answer:
let obj = Object.create(prototypeObj); -> Option BQuick Check:
Object.create() creates object with prototype [OK]
- Using new Object() with prototype argument
- Calling create() on prototype object
- Trying to call Object.prototype as a function
const parent = { greet() { return 'Hello'; } };
const child = Object.create(parent);
console.log(child.greet());Solution
Step 1: Understand prototype lookup
child has no greet method, so JavaScript looks up to parent where greet exists.Step 2: Call greet method from parent
Calling child.greet() runs parent.greet(), returning 'Hello'.Final Answer:
'Hello' -> Option DQuick Check:
Prototype lookup finds greet() = 'Hello' [OK]
- Expecting undefined because child lacks greet
- Thinking it causes error
- Assuming null is returned
const animal = { eats: true };
const rabbit = Object.create(animal);
rabbit.eats = false;
console.log(rabbit.eats);
console.log(animal.eats);Solution
Step 1: Understand property shadowing
Setting rabbit.eats creates a new property on rabbit, shadowing animal.eats.Step 2: Check outputs
rabbit.eats logs false; animal.eats remains true. This is expected behavior.Final Answer:
No error; output is as expected -> Option AQuick Check:
Property shadowing works correctly [OK]
- Thinking parent's property changes
- Believing Object.create is wrong here
- Expecting error from property override
child inherits from parent, and parent inherits from grandparent. Which code correctly sets this prototype chain?Solution
Step 1: Set parent prototype to grandparent
Using Object.create(grandparent) for parent sets grandparent as prototype.Step 2: Set child prototype to parent
Using Object.create(parent) for child sets parent as prototype, completing chain.Step 3: Check other options
B incorrectly overrides child's prototype to grandparent using __proto__, skipping parent; C creates a circular reference (child not defined when creating parent); D sets child directly to grandparent, skipping parent.Final Answer:
const grandparent = {}; const parent = Object.create(grandparent); const child = Object.create(parent); -> Option CQuick Check:
Prototype chain: child -> parent -> grandparent [OK]
- Setting child prototype to grandparent directly
- Reversing prototype chain order
- Using __proto__ instead of Object.create
Ready to prove it?
Pass the test and this pattern moves unknown
