【问题标题】: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.yundefined),我想foo 变为 null(这意味着 Foo 对象未创建)。

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

您建议如何处理这个问题?

【问题讨论】:

标签: javascript constructor


【解决方案1】:

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


回复

我希望foo 成为null(这意味着Foo 对象未被创建)。

没有办法让表达式new Foo(...) 返回null。通常,new 表达式的结果是对由new 运算符构造并作为this 传递给构造函数的对象的引用。构造函数可以覆盖它并返回一个不同的对象,但它不能通过返回null 来实现。如果构造函数没有返回任何东西,或者返回不是对象的东西(不包括nullnull 不是对象[它有自己的类型,Null],尽管事实上typeof null"object"),new 表达式的结果将是 new 运算符创建的对象。更多内容请参见 11.2.213.2.2 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2016-01-03
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多