如何在Javascript中处理错误的构造函数参数?

如何在Javascript中处理错误的构造函数参数?,javascript,constructor,Javascript,Constructor,我有一个Foo构造函数,如下所示: function Foo(params) { this.x = params.x + 5; ... } Foo的名称如下: var foo = new Foo(someObject); 我想检查Foo的构造函数中params的内容,如果有错误(例如params.x不是数字,或者params.y是未定义的),我想Foo为null(这意味着Foo对象没有创建) 我想,一个选项是在构造函数中抛出一个异常,并使用try..catch包装对new Foo

我有一个
Foo
构造函数,如下所示:

function Foo(params) {
  this.x = params.x + 5;
  ...  
}
Foo
的名称如下:

var foo = new Foo(someObject);
我想检查
Foo
的构造函数中
params
的内容,如果有错误(例如
params.x
不是数字,或者
params.y
未定义的
),我想
Foo
null
(这意味着
Foo
对象没有创建)

我想,一个选项是在构造函数中抛出一个异常,并使用
try..catch
包装对
new Foo(someObject)
的调用(或者创建一个类似
makeFoo
的函数)


您建议如何处理此问题?

我将抛出异常。无效输入是一种异常情况,抛出异常是有意义的。我不会为
makeFoo
包装而烦恼;调用代码应该处理它


我希望
foo
null
(这意味着没有创建
foo
对象)


无法使表达式
newfoo(…)
返回
null
。通常,
new
表达式的结果是对由
new
运算符构造并作为
this
传递到构造函数中的对象的引用。构造函数可以重写它并返回不同的对象,但它不能通过返回
null
来实现。如果构造函数不返回任何内容,或返回非对象的内容(不包括
null
null
不是对象[它有自己的类型,],尽管
typeof null
“object”
),
new
表达式的结果将是由
new
操作符创建的对象。在章节和中有更多信息。

我将抛出异常。无效输入是一种异常情况,抛出异常是有意义的。我不会为
makeFoo
包装而烦恼;调用代码应该处理它


我希望
foo
null
(这意味着没有创建
foo
对象)

无法使表达式
newfoo(…)
返回
null
。通常,
new
表达式的结果是对由
new
运算符构造并作为
this
传递到构造函数中的对象的引用。构造函数可以重写它并返回不同的对象,但它不能通过返回
null
来实现。如果构造函数不返回任何内容,或返回非对象的内容(不包括
null
null
不是对象[它有自己的类型,],尽管
typeof null
“object”
),
new
表达式的结果将是由
new
操作符创建的对象。更多信息,请参见第节和。

的可能副本