#### 第一问 当实例化Child时,会首先执行父类Parent的构造函数,然后再执行子类Child的构造函数。 在Parent.constructor方法中打断点如下图所示:  从上图Scope栏中的Local作用域可知,虽然this值指向Child,但是其内部的name属性值是“Parent” * 原因是类字段初始化发生在构造函数执行之前。当 Parent 的构造函数被调用时,类字段的初始化,也就是表达式赋值 name = (() => { console.log('Parent name init') return 'Parent' })() 已经发生了。 * 虽然this 引用的是 Child 的实例,但是因为表达式赋值是Parent 的构造函数被调用之前执行的,所以 this.name 实际上是在 Child 的实例上设置了一个名为 name 的属性,并赋值为 'Parent'。 * 不妨在Parent中增加如下代码: parentName = "parentName" init() { console.log('parent init', this.name) //结果输出parent init Parent console.log("test: ", this.parentName) //结果输出test: parentName } 实际上还是先对类字段进行初始化,然后再调用构造函数实例化 #### 第二问 当执行 super() 方法时,父类 Parent 的构造函数会执行并初始化父类的实例属性,然后才会继续执行子类 Child 的构造函数。在子类的构造函数中,才会对子类的实例属性比如child.num进行初始化