2

我有一个Foo这样的构造函数:

function Foo(params) {
  this.x = params.x + 5;
  ...  
}

Foo是这样调用的:

var foo = new Foo(someObject);

我想检查paramsinFoo的构造函数的内容,如果有问题(例如params.x不是数字,或者params.yundefined),我想foo成为null(这意味着Foo对象没有被创建)。

我猜,一种选择是在构造函数中抛出一个异常并用new Foo(someObject)with包装调用try..catch(或创建一个类似的函数makeFoo)。

你会建议如何处理这个问题?

4

1 回答 1

4

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


关于

我想foo成为null(这意味着Foo没有创建对象)。

没有办法让表达式new Foo(...)return null。通常,new表达式的结果是对由new运算符构造并作为this. 构造函数可以覆盖它并返回一个不同的对象,但它不能通过返回来做到这一点null。如果构造函数没有返回任何东西,或者返回不是对象的东西(不包括null;null不是对象 [它有自己的类型,Null],尽管事实上typeof null"object"),new表达式的结果将是操作员创建的对象new11.2.213.2.2节中的更多内容.

于 2012-04-07T12:13:10.423 回答