Discover how JavaScript lets objects share features like a family tree, saving you from endless copying!
Why Prototype chain in Javascript? - Purpose & Use Cases
Imagine you have many toy cars, and each car has some common features like wheels and color. If you write down the details for each car separately, it takes a lot of time and space.
Writing the same features again and again for every toy car is slow and can cause mistakes. If you want to change a feature, you must update every single car manually, which is tiring and error-prone.
The prototype chain lets all toy cars share common features from a single place. If you change a feature in the shared place, all cars automatically get the update without extra work.
function Car() {
this.wheels = 4;
this.color = 'red';
}
const car1 = new Car();
const car2 = new Car();function Car() {}
Car.prototype.wheels = 4;
Car.prototype.color = 'red';
const car1 = new Car();
const car2 = new Car();This concept makes sharing common features easy and efficient, saving time and reducing mistakes.
When building a game with many characters, the prototype chain lets all characters share common actions like walking or jumping without rewriting code for each one.
Manual copying of features is slow and error-prone.
Prototype chain shares features through a linked structure.
Changing shared features updates all linked objects automatically.
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
