javascript - 停止构造函数

标签 javascript design-patterns

我正在尝试将一种构造函数模式实现到项目的库中。但是,我想在返回对象之前检查是否传递了某些条件。如果不满足这些条件,那么我想停止构造函数并返回 false

但是,我注意到无论我设置什么作为返回值,总是返回一个对象!

即使我这样做:

new function () { return false; }

结果仍然是一个Object对象:

在 Chrome 中:

Chrome console

在 Firefox 中:

Firefox console

有什么方法可以让 Javascript 中的构造函数失败吗?

最佳答案

If those conditions aren't met, then I want to stop the constructor and return false.

你不能。构造函数的返回值将被忽略,除非它是一个非 null 对象。任何原始值(或 null)都会被 new 表达式忽略。

如果您真的想要返回一个标志值,您可以这样做,但它必须是一个对象。 (但这是一个坏主意,更多内容见下文。)例如:

// The constructor
function Foo(num) {
    if (num < 27) {
        return Foo.BAD_ARG; // This is a bad idea, see the right way below
    }
    this.num = num;
}
Foo.BAD_ARG = {}; // Our special "bad argument" object

Is there any way to have a constructor fail in Javascript?

是:抛出异常:

function Foo(num) {
    if (num < 27) {
        throw "`num` must be >= 27";
    }
    this.num = num;
}

关于javascript - 停止构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180785/

相关文章:

javascript - 如何使用 Moment.js 获取 X 天后的年龄?

design-patterns - 在 Jekyll 中标记 "featured"帖子的最佳方法是什么?

design-patterns - 有必要学习设计模式吗?

java - "toString"第三方对象的设计模式

unit-testing - 如何重构和单元测试复杂的遗留 Java EE5 EJB 方法?

c++ - 将许多类链接在一起

javascript - 商品价格未添加到购物篮,且数量不正确

javascript - 如何迭代 Google Analytics 配置文件 ID?

javascript - 将数据表导出到 excel 时提示用户输入文件名

javascript - 如何获得 td 元素相对父 tr 元素的顶部偏移量?