To understand how the insides of classes bound by inheritance relate to each other, we need to understand the concept of late binding.
Remember the HTMLElement base class from the last lesson. this
is actively used to refer to properties within it:
// Base class for all tags. It knows how to work with attributes.
class HTMLElement {
constructor(attributes = {}) {
this.attributes = attributes;
}
getAttribute(key) {
return this.attributes[key];
}
}
Suppose we create an HTMLAnchorElement class object (which inherits HTMLElement). Then what class object would be this
inside the methods of the parent class? The correct answer is HTMLAnchorElement, which is the class whose object we're creating right now. Take a look at this example:
class A {
constructor() {
this.name = 'From A';
}
getName() {
console.log(this.constructor);
return this.name;
}
}
class B extends A {}
const b = new B();
console.log(b.getName());
// [class B extends A]
// => From A
this
feature is called late binding. It means that at the point the class is defined, the type of this
is unknown. The current object can be an object of any class that inherits from the current one. It looks as though all the code inside the base class were copied and transferred to each successor class. For late binding, it doesn't matter how deep the inheritance hierarchy is. this
will always be an object of the class that's constructed in the code.
Late binding is an important element in the workings of inheritance. Without it, class interaction would become much more complicated and limited. Each object would have to know for sure which class the properties and methods in the inheritance chain belong to. You would need to use special syntax to access them.
The Hexlet support team or other students will answer you.
A professional subscription will give you full access to all Hexlet courses, projects and lifetime access to the theory of lessons learned. You can cancel your subscription at any time.
Programming courses for beginners and experienced developers. Start training for free
Our graduates work in companies:
From a novice to a developer. Get a job or your money back!
Sign up or sign in
Ask questions if you want to discuss a theory or an exercise. Hexlet Support Team and experienced community members can help find answers and solve a problem.