Bird
Raised Fist0
Javascriptprogramming~20 mins

Prototype inheritance in Javascript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Prototype Inheritance Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of prototype property access
What is the output of the following code?
Javascript
function Person(name) {
  this.name = name;
}
Person.prototype.greet = function() {
  return `Hello, ${this.name}`;
};
const alice = new Person('Alice');
console.log(alice.greet());
ATypeError: alice.greet is not a function
Bundefined
C"Hello, Alice"
D"Hello, undefined"
Attempts:
2 left
💡 Hint
Remember that methods defined on the prototype are accessible to instances.
❓ Predict Output
intermediate
2:00remaining
Effect of changing prototype after instance creation
What will be the output of this code?
Javascript
function Animal() {}
Animal.prototype.sound = function() { return 'generic sound'; };
const dog = new Animal();
Animal.prototype = {
  sound: function() { return 'bark'; }
};
console.log(dog.sound());
A"bark"
B"generic sound"
CTypeError: dog.sound is not a function
Dundefined
Attempts:
2 left
💡 Hint
Think about when the prototype is linked to the instance.
🔧 Debug
advanced
2:00remaining
Why does this prototype chain fail?
The following code tries to create a prototype chain where Student inherits from Person. Why does calling student.introduce() cause an error?
Javascript
function Person(name) {
  this.name = name;
}
Person.prototype.introduce = function() {
  return `Hi, I'm ${this.name}`;
};

function Student(name, subject) {
  Person.call(this, name);
  this.subject = subject;
}
Student.prototype = Person;
Student.prototype.constructor = Student;

const student = new Student('Bob', 'Math');
console.log(student.introduce());
Aundefined
B"Hi, I'm Bob"
CReferenceError: introduce is not defined
DTypeError: student.introduce is not a function
Attempts:
2 left
💡 Hint
Check how the prototype is assigned for Student.
🧠 Conceptual
advanced
2:00remaining
Prototype chain property lookup order
Given the following objects, which property value will be logged?
Javascript
const grandparent = { trait: 'wisdom' };
const parent = Object.create(grandparent);
parent.trait = 'strength';
const child = Object.create(parent);
console.log(child.trait);
A"strength"
B"wisdom"
Cundefined
DTypeError
Attempts:
2 left
💡 Hint
Remember how property lookup works in prototype chains.
❓ Predict Output
expert
2:00remaining
Output of modifying prototype after instance creation with method override
What is the output of this code?
Javascript
function Vehicle() {}
Vehicle.prototype.move = function() { return 'moving'; };
const car = new Vehicle();
Vehicle.prototype.move = function() { return 'driving'; };
console.log(car.move());
A"driving"
Bundefined
CTypeError: car.move is not a function
D"moving"
Attempts:
2 left
💡 Hint
Think about how methods on the prototype are looked up at call time.

Practice

(1/5)
1. What does prototype inheritance allow in JavaScript?
easy
A. Arrays to store only numbers
B. Functions to run faster
C. Variables to be private
D. Objects to share properties and methods

Solution

  1. Step 1: Understand prototype inheritance concept

    Prototype inheritance allows one object to use properties and methods from another object.
  2. Step 2: Match concept to options

    Only Objects to share properties and methods correctly describes sharing properties and methods between objects.
  3. Final Answer:

    Objects to share properties and methods -> Option D
  4. Quick Check:

    Prototype inheritance = share properties and methods [OK]
Hint: Prototype inheritance means sharing properties/methods [OK]
Common Mistakes:
  • Thinking it speeds up functions
  • Confusing with variable privacy
  • Assuming it limits array types
2. Which syntax correctly creates an object that inherits from another object parentObj?
easy
A. const child = parentObj.create();
B. const child = new Object(parentObj);
C. const child = Object.create(parentObj);
D. const child = Object.inherit(parentObj);

Solution

  1. Step 1: Recall correct syntax for prototype inheritance

    Use Object.create(parentObj) to create a new object inheriting from parentObj.
  2. Step 2: Check options for correct method

    Only const child = Object.create(parentObj); uses Object.create correctly; others are invalid or incorrect.
  3. Final Answer:

    const child = Object.create(parentObj); -> Option C
  4. Quick Check:

    Object.create() creates inherited object [OK]
Hint: Use Object.create(parent) to inherit prototype [OK]
Common Mistakes:
  • Using new Object(parentObj) which doesn't inherit
  • Using non-existent Object.inherit method
  • Calling create on parentObj instead of Object
3. What is the output of this code?
function Parent() { this.name = 'Parent'; }
Parent.prototype.greet = function() { return 'Hello from ' + this.name; };

function Child() { Parent.call(this); this.name = 'Child'; }
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

const c = new Child();
console.log(c.greet());
medium
A. 'Hello from Parent'
B. 'Hello from Child'
C. undefined
D. TypeError: c.greet is not a function

Solution

  1. Step 1: Understand property assignment in Child constructor

    Child calls Parent constructor to set this.name, then overwrites it with 'Child'.
  2. Step 2: Check prototype chain and method call

    Child's prototype inherits from Parent.prototype, so greet() is available and uses this.name which is 'Child'.
  3. Final Answer:

    'Hello from Child' -> Option B
  4. Quick Check:

    Child instance uses own name 'Child' in greet() [OK]
Hint: Child overwrites name, greet uses Child's name [OK]
Common Mistakes:
  • Assuming greet uses Parent's name
  • Forgetting to call Parent.call(this)
  • Not resetting Child.prototype.constructor
4. Find the error in this code that tries to set up prototype inheritance:
function Animal() { this.alive = true; }
Animal.prototype.breathe = function() { return 'breathing'; };

function Dog() { Animal.call(this); this.bark = function() { return 'woof'; } }
Dog.prototype = Animal.prototype;

const d = new Dog();
console.log(d.breathe());
medium
A. Dog.prototype should be Object.create(Animal.prototype)
B. Animal.call(this) should be Dog.call(this)
C. Dog.prototype.bark should be defined outside constructor
D. No error, code works fine

Solution

  1. Step 1: Identify prototype assignment mistake

    Assigning Dog.prototype = Animal.prototype links both constructors to same prototype object, causing shared mutations.
  2. Step 2: Correct way to inherit prototype

    Use Dog.prototype = Object.create(Animal.prototype) to create a new object inheriting from Animal.prototype without sharing it directly.
  3. Final Answer:

    Dog.prototype should be Object.create(Animal.prototype) -> Option A
  4. Quick Check:

    Use Object.create for prototype inheritance [OK]
Hint: Use Object.create to avoid shared prototype object [OK]
Common Mistakes:
  • Assigning prototype directly instead of using Object.create
  • Confusing call() usage
  • Defining methods inside constructor unnecessarily
5. You want to create a Car object that inherits from Vehicle and adds a drive method. Which code correctly sets this up and calls drive on a Car instance?
hard
A. function Vehicle() { this.wheels = 4; } Vehicle.prototype.move = function() { return 'moving'; }; function Car() { Vehicle.call(this); } Car.prototype = Object.create(Vehicle.prototype); Car.prototype.constructor = Car; Car.prototype.drive = function() { return 'driving'; }; const myCar = new Car(); console.log(myCar.drive());
B. function Vehicle() { this.wheels = 4; } Vehicle.prototype.move = function() { return 'moving'; }; function Car() { this.wheels = 4; } Car.prototype = Vehicle.prototype; Car.prototype.drive = function() { return 'driving'; }; const myCar = new Car(); console.log(myCar.drive());
C. function Vehicle() { this.wheels = 4; } Vehicle.prototype.move = function() { return 'moving'; }; function Car() { Vehicle.call(this); } Car.prototype.drive = function() { return 'driving'; }; const myCar = new Car(); console.log(myCar.drive());
D. function Vehicle() { this.wheels = 4; } Vehicle.prototype.move = function() { return 'moving'; }; function Car() { Vehicle.call(this); } Car.prototype = Object.create(Vehicle.prototype); const myCar = new Car(); console.log(myCar.drive());

Solution

  1. Step 1: Set up inheritance correctly

    Use Vehicle.call(this) inside Car constructor to copy properties, then set Car.prototype = Object.create(Vehicle.prototype) to inherit methods.
  2. Step 2: Add drive method and create instance

    Define drive on Car.prototype, then create instance and call drive().
  3. Final Answer:

    Code in option A correctly sets inheritance and calls drive() -> Option A
  4. Quick Check:

    Call parent, use Object.create, add method, then call [OK]
Hint: Call parent, Object.create prototype, add method, then use instance [OK]
Common Mistakes:
  • Assigning prototype directly instead of Object.create
  • Not calling Vehicle.call(this) in Car
  • Forgetting to set constructor property
  • Defining methods before setting prototype
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard