Как узнать, в какой функции находится функция?
Я пытаюсь создать фреймворк диаграмм состояний в качестве проекта в свободное время.
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.
Держите меня в курсе, если вам нужна помощь или есть вопросы.