Как узнать, в какой функции находится функция? - PullRequest
0 голосов
/ 18 ноября 2011

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

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 ]

1 голос
/ 19 ноября 2011

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

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

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

0 голосов
/ 05 июня 2012

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

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

0 голосов
/ 18 ноября 2011

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

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

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