【发布时间】:2018-04-13 17:08:46
【问题描述】:
我知道 ES6 中的类实际上是语法糖。 super() 调用真的只是调用 proto 吗? (它是否映射到 [[prototype]] 对象?)
【问题讨论】:
-
不,它没有调用
__proto__。这是一个已弃用的 getter/setter,不应被任何东西使用。
标签: javascript es6-class
我知道 ES6 中的类实际上是语法糖。 super() 调用真的只是调用 proto 吗? (它是否映射到 [[prototype]] 对象?)
【问题讨论】:
__proto__。这是一个已弃用的 getter/setter,不应被任何东西使用。
标签: javascript es6-class
还不止这些。它还会记住方法的定义位置。
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]]。
【讨论】: