我有一些课程:
class Sample{
static createSelf() {
return new this.constructor(1, 2);
}
}
class AnotherClass extends Sample {
constructor(a, b) {
this.c = a+b;
}
}
ac = AnotherClass.createSelf();
我该怎么做?
这个具体的例子给了我SyntaxError: missing formal parameter
,虽然在我的原始代码(500行)中,当我有new this.constructor()
时,我得到SyntaxError: missing ] after element list
指向第一行(形式参数错误)也指向第1行)。我知道这是因为这一行,因为当我用普通的类名替换它时,它可以工作。没有数组初始化关闭。错误不可能意味着:
某处的数组初始化程序语法出错。可能有一个结束括号("]")或逗号(",")缺失。
这 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Missing_bracket_after_list
UPDATE 原始代码:
class Participant {
constructor(origin, destination, number, startDate, endDate) {
...
}
static restore(save) {
const participant = new this.constructor(
new Marker(save.originLocation, this.getMarkerOptions(true, save.isDriver, save.number)).addTo(map),
new Marker(save.destinationLocation, this.getMarkerOptions(false, save.isDriver, save.number)).addTo(map),
save.number,
save.startDate,
save.endDate
);
return participant;
};
}
class Driver extends Participant {}
d = Driver.restore(saveObject);
答案 0 :(得分:4)
如果错误指向第一行,则语法错误之前您在此处发布的代码。 德尔>
原因是这个错误的原因是this.constructor
引用了Function
,它将评估作为代码传递给它的一个参数。由于您没有将JavaScript代码传递给它,因此您会收到语法错误。
示例(打开浏览器的控制台):
new Function({});

但是,您在此处发布的代码也存在两个问题。
静态方法中的 this
this
的值取决于函数的调用方式。静态方法被称为构造函数函数的方法,因此this
引用构造函数。在您的示例中,使用AnotherClass.createSelf();
,this
引用AnotherClass
。因此this.constructor
引用Function
。我不认为这就是你想要的。我想你想要
class Sample{
static createSelf() {
return new this(1, 2);
}
}
看起来您认为this
会引用该类的实例,但它怎么可能呢?你还没有创建一个。
this
内部构造函数
当一个类扩展另一个类时,始终必须在构造函数内调用super()
才能访问this
:
class AnotherClass extends Sample {
constructor(a, b) {
super();
this.c = a+b;
}
}