функция может возвращать null
, но есть ли способ для экземпляра new
функции вернуть ноль? Например,
в этом глупом коде (строго в целях иллюстрации)
var f = function(j) { if( j > 5 ) return null; this.j = j; };
for( var f1=f(1); f1; f1=f(fi.j) ) {
...
}
то, что код не делает, имеет new f()
return null - кажется, когда new
возвращаемое значение просто отбрасывается.здесь new f()
вообще не имеет смелости, кроме __proto__
, но отказывается аннулировать себя.
является разумной альтернативой для поиска возвращаемого безжизненного "объекта"?если это так, не зная заранее, как должен выглядеть «объект», каков наилучший способ проверить это?
решение:
с учетом того, что javascript new
не может завершиться с ошибкой - он должен вернуть объект и не может вернуть ноль (см. Ответы ниже!), 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
для управления циклом - не моя чашка чая, но новые спецификации javascript на iterators
используют тот же механизм, поэтому мне, вероятно, нужно подумать про себя "за исключением", а не"ошибки".