в javascript, возможно ли, чтобы новая функция возвращала NULL? - PullRequest
0 голосов
/ 19 июля 2011

функция может возвращать 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 используют тот же механизм, поэтому мне, вероятно, нужно подумать про себя "за исключением", а не"ошибки".

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

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 голос
/ 19 июля 2011

new F возвращает объект.

null - это значение, а не объект.

Вы не можете сделать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...