javascript - 如果未提供某些参数,是否阻止 Javascript 构造函数创建新实例?
问题描述
如果未提供参数,我想阻止构造函数实例化新对象。同样在这种情况下,我喜欢返回 null。但是构造函数正在创建一个对象实例,即使我认为我返回的是 null。
class SampleClass {
constructor(someArg){
if(someArg){
return new SampleClass();
}
else{
return null;
}
}
}
const sampleClass = new SampleClass();
console.log(sampleClass);
解决方案
你不能那样做;构造函数不能返回 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);
}
推荐阅读
- nan - Meshlab nan 坐标和退化的面
- python - 无法安装cartopy
- node.js - Google API Node.js YouTube 示例:oauth2.keys.json 位置和重定向 URL
- javascript - jQuery追加重复循环
- java - EditText 到 String 返回 Null
- c# - 让 XDocument 识别嵌入式 SSML
- r - 将文件名作为列添加到循环内的 data.frame
- python - 将图像转换为矢量数组以进行图形绘制
- node.js - 在 jest 拆解中杀死 node.js 服务器(在 jest 的 setup 挂钩中启动)
- c - C- 查找我打开的文本文件的当前行