Javascript 学习笔记 5
JS 是个好东西啊,可惜有些东西太灵活,我把我不住。
就比如今天的这个例子:
class Base {
name = '父类';
constructor() {
console.log(this.name);
}
}
class Sub {
name = '子类';
}
new Sub(); // 嗯?竟然返回了“父类”
这是为啥呢?JS 的 this 难道不是由词法环境决定的吗?事实的确如此,this 依然是由此法环境决定的。
实际上,这时初始化 Sub 时,先会初始化父类,也就是 Base,因为构造器默认是super(...args)
,所以这时的 name 仍然是 父类
,当初始化完成之后,才会把子类的方法和属性赋值给 Sub。