首页 > 解决方案 > 如果未提供某些参数,是否阻止 Javascript 构造函数创建新实例?

问题描述

如果未提供参数,我想阻止构造函数实例化新对象。同样在这种情况下,我喜欢返回 null。但是构造函数正在创建一个对象实例,即使我认为我返回的是 null。

class SampleClass {
  constructor(someArg){
    if(someArg){
      return new SampleClass();
    }
    else{
      return null;
    }
  }
}

const sampleClass = new SampleClass();
console.log(sampleClass);

标签: javascriptnode.js

解决方案


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

您可以做的是创建一个将返回的工厂方法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);
}


推荐阅读