我知道ES6中的类实际上是语法糖。 super()调用真的只是调用 proto 吗? (它是否映射到[[prototype]]对象?)
答案 0 :(得分:3)
它不仅仅是那个。它还会记住方法的定义。
const example = {
method() {
return super.method();
}
}
是
的语法糖const example = {
method() {
return Object.getPrototypeOf(example).method.call(this);
}
}
和
class Example {
method() {
return super.method();
}
}
是
的语法糖class Example {
method() {
return Object.getPrototypeOf(Example.prototype).method.call(this);
}
}
对于构造函数中的super()
调用,它同样在构造函数上使用Object.getPrototypeOf
,但是does a bit more there。
是否映射到[[prototype]]对象?
是。不是调用函数的对象的[[prototype]](this
),而是定义函数的对象的[[prototype]]。