JavaScript中super函数为何看起来调用了子类自身的构造函数?
JavaScript super关键字示例疑问解答
- 首先明确:示例中的
super调用的是父类Rectangle的构造函数,而非子类Square的构造函数,你此前对super基础作用的认知是正确的,它的作用就是调用父类构造完成继承初始化。 - 关于参数的疑问:你提到的「调用
super时需要传入父类要求的height和width参数」的规则完全正确,这个示例恰恰就是遵守这个规则实现的。
Square作为正方形的类,长宽值完全相等,所以它的构造函数只需要接收一个length参数作为边长即可。调用super(length, length)的时候,就是把第一个length作为父类构造要求的height入参、第二个length作为父类要求的width入参传入,完全匹配父类构造的参数要求。
你给出的代码运行后会输出以下结果:
{"name":"Square","height":4,"width":4} 4
这个结果也能验证逻辑正确性:父类构造成功给实例赋值了height和width属性,子类也成功覆盖了name属性为Square。
这种写法是类继承的典型使用场景:子类复用父类已经实现的属性赋值逻辑,只需要针对自身的特性(正方形长宽相等)做入参适配即可,不需要重复编写height、width的赋值代码,减少逻辑冗余。
内容的提问来源于stack exchange,提问作者Toby
相关产品推荐
相关产品推荐

