JavaScript类的constructor是特殊静态方法吗?如何修改静态方法返回实例
JavaScript类constructor性质与静态工厂方法修改方案
constructor的属性澄清
constructor 不是 类的静态方法,它是挂载在类原型上的特殊实例方法:使用new关键字调用类时,JS会自动生成空实例,将constructor内部的this绑定到该实例,执行constructor的初始化逻辑后返回实例。
现有createWarrior方法的问题
静态方法内部的this默认指向类本身,你当前的写法是给warrior类对象挂载属性,最终返回的也是warrior类本身而非类的实例,后续调用warrior2.sayHello()会抛出方法未定义的报错。
正确修改方式
你只需要在静态方法内调用constructor生成实例后返回即可,修改后的代码如下:
static createWarrior(firstName, lastName, age) { // 调用类的constructor生成新实例,this指向当前类 return new this(firstName, lastName, age); }
修改后调用warrior.createWarrior()即可得到正常的warrior类实例,sayHello方法也可以正常执行。
内容的提问来源于stack exchange,提问作者yurukyuruk
相关产品推荐
相关产品推荐

