如何找到Class的原型对象?
How to find the prototype object of a Class?
了解 classes、原型等,最终对我来说一切都到位了(至少可以说这很令人兴奋 :)))
但是,我的问题与找到 Class 的对象原型有关,理论上我应该在其中找到它的方法。
例如:
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");
innerRGB()、rgb() 和 rgba() 存储在哪里?我在 window 对象上找不到它们。他们在哪? class 颜色存储在哪里?
当我在控制台输入 Color() 时,我得到:
Uncaught TypeError: Class constructor Color cannot be invoked without 'new'
我很清楚构造函数的内部工作原理,我不清楚的是原型所在的位置以及我如何访问和检查它。
如果您想访问实例的原型,请使用 __proto__
字段。如果您想在 class 本身上查看原型,请使用 prototype
字段。
创建实例时会发生什么,实例的 __proto__
字段设置为 class 的 prototype
字段。
instance.__proto__ === Class.prototype
以下是您的代码段的对象关系:
中间的对象,red.__proto__
,a.k.a red.constructor.prototype
,a.k.a。 Object.getPrototypeOf(red)
a.k.a。 Color.prototype
是存储方法的地方。
class Color
本身的范围(在图表上是 ƒ Color
)是它的包含块,就像任何其他变量一样。在Javascript中,classes是函数,函数是变量:
{
// block started
class Color { // it's the same as "let Color = function...
...
}
// block ended
}
// "Color" doesn't exist here
了解 classes、原型等,最终对我来说一切都到位了(至少可以说这很令人兴奋 :))) 但是,我的问题与找到 Class 的对象原型有关,理论上我应该在其中找到它的方法。
例如:
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");
innerRGB()、rgb() 和 rgba() 存储在哪里?我在 window 对象上找不到它们。他们在哪? class 颜色存储在哪里?
当我在控制台输入 Color() 时,我得到:
Uncaught TypeError: Class constructor Color cannot be invoked without 'new'
我很清楚构造函数的内部工作原理,我不清楚的是原型所在的位置以及我如何访问和检查它。
如果您想访问实例的原型,请使用 __proto__
字段。如果您想在 class 本身上查看原型,请使用 prototype
字段。
创建实例时会发生什么,实例的 __proto__
字段设置为 class 的 prototype
字段。
instance.__proto__ === Class.prototype
以下是您的代码段的对象关系:
中间的对象,red.__proto__
,a.k.a red.constructor.prototype
,a.k.a。 Object.getPrototypeOf(red)
a.k.a。 Color.prototype
是存储方法的地方。
class Color
本身的范围(在图表上是 ƒ Color
)是它的包含块,就像任何其他变量一样。在Javascript中,classes是函数,函数是变量:
{
// block started
class Color { // it's the same as "let Color = function...
...
}
// block ended
}
// "Color" doesn't exist here