Function Prototype
Prototypes / Inheritance: Function Prototype
What is the function.prototype property in JavaScript?
View Answer:
Interview Response: In simple terms, the function.prototype is a regular property in a function. Every Object in JavaScript contains the prototype meaning a regular property with the prototype name.
Code Example:
let animal = {
eats: true,
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal; // references animal
let rabbit = new Rabbit('White Rabbit'); // rabbit.__proto__ == animal
alert(rabbit.eats); // true
Can you explain how the function.prototype property works in JavaScript?
View Answer:
Interview Response: Every function has the "prototype” property even if we do not supply it. The prototype object is a special type of enumerable object to which additional properties can be attached to and shared across all the instances of its constructor function. A function prototype property only gets used when a new Function gets called, and it assigns the prototype of the new object.
Technical Response: Even if we don't offer it, every function has the "prototype" attribute. When a new Function gets invoked, the function prototype property assigns the [[Prototype]] to the new object. After the function prototype property changes (func.prototype = {another object}), new objects generated by the new Function gets another object as [[Prototype]], while existing objects retains the previous one. A default prototype is an object with the sole constructor pointing back to the function itself.
Code Example:
function Rabbit() {}
// by default:
// Rabbit.prototype = { constructor: Rabbit }
let rabbit = new Rabbit(); // inherits from {constructor: Rabbit}
alert(rabbit.constructor == Rabbit); // true (from prototype)
What happens when you replace the default function prototype in JavaScript?
View Answer:
Interview Response: When you override the default prototype in an object, we lose access to the function constructor property of the prototype.
Code Example:
function Rabbit() {}
Rabbit.prototype = {
jumps: true,
};
let rabbit = new Rabbit();
alert(rabbit.constructor === Rabbit); // false