停止构造函数

Mar*_*tin 2 javascript design-patterns

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

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

即使我这样做:

new function () { return false; }
Run Code Online (Sandbox Code Playgroud)

结果仍然是一个Object对象:

在Chrome中:

Chrome控制台

在Firefox中:

Firefox控制台

有没有办法让Javascript中的构造函数失败?

T.J*_*der 6

如果不满足这些条件,那么我想停止构造函数并返回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
Run Code Online (Sandbox Code Playgroud)

有没有办法让Javascript中的构造函数失败?

是的:抛出异常:

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