函数可以返回null
,但是函数的new
实例有没有办法返回null?
例如,在这个愚蠢的代码中(严格来说是为了说明)
var f = function(j) { if( j > 5 ) return null; this.j = j; }; for( var f1=f(1); f1; f1=f(fi.j) ) { ... }
代码不做的是让new f()
返回null - 似乎只有new
返回值被丢弃。 new f()
除了__proto__
之外没有任何其他内容,但拒绝让自己无效。
是寻找一个无法回归的“对象”的合理选择吗?如果是这样,事先不知道“对象”看起来是什么样的,那么最好的测试方法是什么?
溶液:
考虑到javascript的new
不能失败 - 它必须返回一个对象并且不能返回null(请参阅下面的答案!),imho是完成该示例的正确方法:
var F = function(i) { if( i > 5 ) throw( 'tooMuch' ); this.i = i; } try { for( var f = new F(1); true; f = new F(f.i) ) { ... } } catch( er ) { null; }
这使用throw/catch
进行循环控制 - 不是我的一杯茶,但是iterators
上的新javascript规范使用了相同的机制,所以我可能需要自己思考“thow例外“,不是”thow errors“。
答案 0 :(得分:3)
ou CAN 返回 自己的对象 ,而不是new
给出的对象 - 但请记住它必须是一个对象 - null
不会 - 但具有讽刺意味的是typeof null
也是object
function F(x) {
if (x < 10) return new Number(0);
this.x = x;
}
现在你可以做你的事了......
for ( var i = 1, k = new F(i); k; k = new F(++i) ) {
// dance .~.~.~.
}
答案 1 :(得分:1)
new F
返回一个对象。
null
是一个值而不是一个对象。
你不能这样做