Mar*_*tin 2 javascript design-patterns
我正在尝试将一种构造函数模式实现到项目的库中.但是,我想检查在返回对象之前传递的某些条件.如果不满足这些条件,那么我想停止构造函数并返回false.
但是,我注意到无论我设置什么作为返回值,总是返回一个对象!
即使我这样做:
new function () { return false; }
Run Code Online (Sandbox Code Playgroud)
结果仍然是一个Object对象:
在Chrome中:

在Firefox中:

有没有办法让Javascript中的构造函数失败?
如果不满足这些条件,那么我想停止构造函数并返回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)
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |