Learning about classes, prototypes etc. and it's finally all coming into place for me (which is quite exciting to say the least :))) However, my question has to do with finding the object prototype of a Class, where I should in theory find the its methods.
For example:
class Color {
constructor(r, g, b, name) {
this.r = r;
this.g = g;
this.b = b;
this.name = name;
}
innerRGB() {
const { r, g, b } = this;
return `${r}, ${g}, ${b}`;
}
rgb() {
return `rgb(${this.innerRGB()})`;
}
rgba(a = 1.0) {
return `rgba(${this.innerRGB()}, ${a})`;
}
}
const red = new Color(255, 67, 89, "tomato");
Where are innerRGB(), rgb() and rgba() stored? I can't find them on the window object. Where are they? Where is the class Color stored?
When I enter Color() in the console, I get:
Uncaught TypeError: Class constructor Color cannot be invoked without 'new'
I'm clear on the inner workings of constructor functions, what's unclear to me is where the prototype resides and how I can access and inspect it.
Here are object relationships for your code snippet:
The object in the middle,
red.__proto__
, a.k.ared.constructor.prototype
, a.k.a.Object.getPrototypeOf(red)
a.k.a.Color.prototype
is where methods are stored.The scope of the class
Color
itself (which isƒ Color
on the diagram) is its containing block, like with any other variable. In Javascript, classes are functions and functions are variables: