如果未提供某些参数,阻止 Javascript 构造函数创建新实例?


如果没有提供参数,我想阻止构造函数实例化新对象。同样在这种情况下,我喜欢返回null。但是构造函数正在创建一个对象实例,即使我返回了null。
class SampleClass {
constructor(someArg){
if(someArg){
return new SampleClass();
}
else{
return null;
}
}
}
const sampleClass = new SampleClass();
console.log(sampleClass);

你不能那样做;构造函数不能返回null。请参阅构造函数可以返回哪些值以避免返回此值?。

您可以创建一个将返回null的工厂方法。请参见下文。你的问题表明,如果提供了论点,你会忽略它,但我认为你会想使用它,所以我做出了改变。请参见下文。

class SampleClass {
constructor(someArg){
this.someArg = someArg;
}
static create(someArg) {
return (someArg) ? new SampleClass(someArg) : null;
}
}
const willBeNull = SampleClass.create();
console.log(willBeNull);
const willNotBeNull = SampleClass.create("foo");
console.log(willNotBeNull);

正如一些评论者所建议的那样,你也可以抛出一个错误:

class SampleClass {
constructor(someArg){
if (!someArg) throw new TypeError("an argument is required");
this.someArg = someArg;
}
}
const sampleClass = new SampleClass("foo");
console.log(sampleClass);
try {
const willError = new SampleClass();
// below console.log will not be reached
console.log(willError);
} catch(e) {
// instead we will catch the error here
console.log(e.stack);
}

最新更新