class Base {
model = 'base'
constructor() {
console.log(this.model)
}
}
class Derived extends Base {
model = 'derived'
}
let obj = new Derived()
console.log(obj.model)
打印结果: base derived
实例化 Derived 的对象时,父类 Base 构造函数中,Derived 里面定义的 model 还没有绑定到 this,所以只能取到'base'。如果想得到'derived'是否只能重写 Derived 的 constructor ?想问或者有没有更优雅的办法。
还有试了一下 es7 的静态属性
class Base {
static model = 'base'
constructor() {
console.log(this.constructor.model)
}
}
class Derived extends Base {
static model = 'derived'
}
let obj = new Derived()
打印结果: derived
虽然可以生效,但是不能通过对象实例(this)访问。
1
onfuns 2020-03-11 12:29:39 +08:00
构造函数加 super
|
2
chenstack OP @onfuns 加了是一样的结果
class Base { model = 'base' constructor() { console.log(this.model) } } class Derived extends Base { model = 'derived' constructor() { super() console.log(this.model) } } let obj = new Derived() 我打算在 Base 的 constructor 加上 model 参数,由子类 super('derived')这种方式传递了 |
3
chenluo0429 2020-03-11 12:48:22 +08:00
为什么要在 Base 的构造函数里面获取不同的 model 值?是要在基类判断子类类型进行特殊处理?
|
4
chenstack OP @chenluo0429 想在基类最后做一些操作,例如根据 model 读取不同的配置文件,例子里面的值只是为方便展示
|
5
chenluo0429 2020-03-11 14:25:15 +08:00
@chenstack 显然不应该在基类去处理子类的问题。对于基类来说,子类是不可知的。可以在 base 实现一个配置读取的方法,然后在 derived 去 override
|
6
Handle 2020-03-12 10:22:51 +08:00
或许不应该在 constructor 里面做?
可以新建一个方法来判断子类 |
7
chenstack OP @Handle 因为想在 constructor 里面就做读取配置这个操作,新建一个方法在 constructor 调用也是一样的结果,现在我由子类传递这个参数给父类的 constructor 初始化了
|
8
chnwillliu 2020-03-14 19:18:25 +08:00 via Android
这俩东西都还不是 ES 标准呢,不是你说的 ES6 的内容。这个提案在 stage 3 里躺了一年多了,愣是进不了 stage 4。
|