未显式定义构造函数的ES6子类的默认构造器机制是什么?
ES6子类未指定构造函数时的默认构造行为
当ES6子类未显式定义构造函数时,子类的构造器和父类构造器并不相同,但实例化子类时所有参数会被传入父类构造器,测试代码如下:
class SuperClass { constructor(arg1, arg2, arg3) { console.log(arg1, arg2, arg3); } } class SubClass extends SuperClass {} console.log( "Is the subclass constructor the same as the superclass?", SubClass.prototype.constructor === SuperClass.prototype.constructor ); // false new SubClass(1, 2, 3); // 1 2 3
问题
JavaScript会在子类未指定构造函数时添加默认构造实现吗?猜测它会添加如下构造器:
constructor(...args) { super(...args); }
但对此不确定,也找不到权威资料佐证。
回答
是的,JavaScript规范明确规定,未显式定义构造函数的子类会自动获得默认构造器,其行为完全等同于你猜测的代码:
constructor(...args) { super(...args); }
这个默认构造器会接收实例化时传入的所有参数,并原封不动地传递给父类的构造函数super()。另外,子类的prototype.constructor属性会指向子类自身,这也是测试代码中两者构造器比较结果为false的原因。
内容的提问来源于stack exchange,提问作者Guerric P
相关产品推荐
相关产品推荐

