【问题标题】:How to handle wrong constructor arguments in Javascript?如何在 Javascript 中处理错误的构造函数参数?
【发布时间】:2012-04-07 12:09:00
【问题描述】:
我有一个像这样的Foo 构造函数:
function Foo(params) {
this.x = params.x + 5;
...
}
Foo 是这样调用的:
var foo = new Foo(someObject);
我想检查Foo的构造函数中params的内容,如果有问题(例如params.x不是数字,或者params.y是undefined),我想foo 变为 null(这意味着 Foo 对象未创建)。
我想,一个选择是在构造函数中抛出异常,然后用try..catch 包装对new Foo(someObject) 的调用(或者创建一个类似makeFoo 的函数)。
您建议如何处理这个问题?
【问题讨论】:
标签:
javascript
constructor
【解决方案1】:
我会抛出异常。无效输入是异常情况,抛出异常是有意义的。我不会打扰makeFoo 包装器;调用代码应该处理它。
回复
我希望foo 成为null(这意味着Foo 对象未被创建)。
没有办法让表达式new Foo(...) 返回null。通常,new 表达式的结果是对由new 运算符构造并作为this 传递给构造函数的对象的引用。构造函数可以覆盖它并返回一个不同的对象,但它不能通过返回null 来实现。如果构造函数没有返回任何东西,或者返回不是对象的东西(不包括null;null 不是对象[它有自己的类型,Null],尽管事实上typeof null 是 "object"),new 表达式的结果将是 new 运算符创建的对象。更多内容请参见 11.2.2 和 13.2.2 部分。