Javascript ES6类内部工作:原型任务理解

Javascript ES6类内部工作:原型任务理解,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图理解类在ES6中是如何在幕后工作的,还有一件事很不清楚,那就是如何为子类设置原型。以下是我正在读的文章: 在这里,我们看到以下两行: Object.setPrototypeOf(Child, Base); Object.setPrototypeOf(Child.prototype, Base.prototype); 当我们创建一个Child类时,由于Child是一个幕后的构造函数,因此我希望使用Child.prototype来创建它,因此继承解释中的第二行对我来说很清楚: Object

我试图理解类在
ES6
中是如何在幕后工作的,还有一件事很不清楚,那就是如何为子类设置原型。以下是我正在读的文章:

在这里,我们看到以下两行:

Object.setPrototypeOf(Child, Base);
Object.setPrototypeOf(Child.prototype, Base.prototype);
当我们创建一个
Child
类时,由于
Child
是一个幕后的构造函数,因此我希望使用
Child.prototype
来创建它,因此继承解释中的第二行对我来说很清楚:

Object.setPrototypeOf(Child.prototype, Base.prototype);
然而,第一行的目的是什么-
Object.setPrototypeOf(Child,Base)-它是如何有用的?

(我可能也不太清楚第二行,尽管我也完全理解)

子构造函数继承自基构造函数,因此静态函数之类的东西的行为是合理的,例如:

class Base {
  static function foo() { return 42; }
}
class Child extends Base {}

console.log(Child.foo() === 42); // true
Base.prototype
Child.prototype
在这里根本不起作用,因为没有类的实例,所以构造函数本身也使用继承。在不使用
语法的情况下实现此功能时,以

function Base() {}
Base.foo = function foo() { return 42; };

function Child() {}
Object.setPrototypeOf(Child, Base);
Object.setPrototypeOf(Child.prototype, Base.prototype);

console.log(Child.foo() === 42); // true

几乎是重复的(但你不可能发现:D)它不是真的,因为它处理的是与引用的问题无关的其他代码,它涉及到类在表面下的工作方式,即使底层机制是相同的。