There are 2 ways to call the parent constructor in the child.
var A = function A() {
this.x = 123;
};
var B = function B() {
// 1. call directly
A.call(this);
// 2. call from prototype
A.prototype.constructor.call(this);
};
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
Are there any situations when one would be safer/better than the other, or are they always equivalent?
In JavaScript, a constructor gets called when an object is created using the new keyword.
Yes, it is possible, when your constructor function executes, the this value has already the [[Prototype]] internal property pointing to the ValidateFields.
The super keyword is used to call the constructor of its parent class to access the parent's properties and methods.
The super keyword is used to access properties on an object literal or class's [[Prototype]], or invoke a superclass's constructor. The super. prop and super[expr] expressions are valid in any method definition in both classes and object literals.
It's always better to use the base constructor directly for the following reasons:
prototype.constructor
.A
inherits from C
, but I forgot to set A.prototype.constructor
back to A
. So it now points to C
. This causes problems in the constructor B
if we use the second method:
var C = function C() {
// some code
};
var A = function A() {
this.x = 123;
};
A.prototype = Object.create(C.prototype);
// I forgot to uncomment the next line:
// A.prototype.constructor = A;
var B = function B() {
// 1. call directly
A.call(this);
// 2. call from prototype
A.prototype.constructor.call(this); // A.prototype.constructor is C, not A
};
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With