Как узнать, в какой функции находится функция?

Я пытаюсь создать фреймворк диаграмм состояний в качестве проекта в свободное время.

CoffeeScript

Statechart.state "A", ->
  @state "B1", ->
    @state "C"
  @state "B2", ->

JavaScript

Statechart.state("A", function() {
  this.state("B1", function() {
    this.state("C");
  });
  this.state("B2", function() {
  });
});

Интересно, есть ли способ, чтобы внутренние функции знали о внешней, чтобы B1 и B2 знали, что они являются потомками A, а C знает, что это дочерние элементы B1.

ОБНОВЛЕНИЕ: я использовал bind(). Работало отлично!

3 ответа

Решение

Используйте жирную стрелку =>, Он использует реализацию Function.prototype.bind:

Statechart.state "A", ->
   @state "B1", =>
       @state "C"
   @state "B2", =>

В этом коде @ / this всегда будет ссылаться на Statechart объект.

Вам нужно хранить ссылку на значение this/@ внутри первой функции.

Я обычно создаю переменную под названием "self", как показано ниже:

Statechart.state "A", ->
   self = @
   @state "B1", ->
       self.state "C"
   @state "B2", ->

Я написал один, который довольно полнофункциональный в явном JavaScript. Stativus. Вы можете использовать это в качестве модели для реализации в CoffeeScript.

Держите меня в курсе, если вам нужна помощь или есть вопросы.

Другие вопросы по тегам