2015-10-12 3 views
2

Имея такой объект, как это:Как знать, если вызываемый метод является последним

var foo = { 
    a: function() { 
     /* 
      if (lastCall) { 
      return this.b(); 
      } 
     */ 
     ... 
     return this; 
    } 
    , b: function() { return ...; } 
}; 

Как я могу знать, внутри метода a если текущий a вызов является последним?

foo.a().a().a().a() 
//    ^- This should return another value 
//     while the other calls return `this` 

Я знаю, что могу использовать логическое значение, или что-то в последнем вызове, но если это возможно, я хотел бы избежать этого.

Итак, можно ли проверить, является ли текущий вызов последним в стеке?

+0

Возможно, вам понадобится использовать глобальную переменную? –

+0

@PraveenKumar OP не знает, сколько раз будет вызываться метод, поэтому использование счетчика может не помочь – Tushar

+0

@Tushar Na, а не для счетчика, но в этом случае глобальная переменная может работать. Я не знаю. Все еще пытаюсь думать. –

ответ

1

Когда вы находитесь в a, следующий a еще не вызывается. Поэтому вы не можете знать, что после этого будет еще один вызов a.

Вы можете получить стек с Error объектом:

var stack = new Error().stack; 

Но стек не поможет. Следующий вызов a не находится в стеке.

Я уверен, что вы не можете сделать это без изменения синтаксиса, например foo.a().a().b(); или foo.a().a().a(true);.

Смежные вопросы