Использование переменных / методов экземпляра в подписке Reactive Framework в Javascript - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть объект в JS, в котором я пытаюсь протестировать Reactive Framework. В подписке на событие я хотел бы вызвать метод экземпляра включающего класса, в котором определена подписка, например так;

function MyClass()
{
    var DoSomething = function(a,b) { ... }

    var InstanceVariable = 1;

    this.uiEvent = uiDiv.jqueryUiWidget("widget")
        .toObservable("change")
        .Subscribe(
                function (event)
                {
                    // Want to call the instance method in the enclosing class
                    DoSomething(1,2);
                });

    this.uiEvent2 = uiDiv.jqueryUiWidget("widget")
        .toObservable("change")
        .Subscribe(
                function (event)
                {
                    // Want to use the instance variable within here
                    alert(InstanceVariable);  
                });
}

Как я могу это сделать (поскольку область действия this соответствует подписке)? Должен ли я передавать функцию / переменную при настройке подписки каким-либо образом?

Если я пытаюсь сделать это, я получаю сообщение об ошибке во всех браузерах, в котором говорится, что переменные или методы экземпляра не существуют: «this» в рамках функции, где я хочу вызывать члены экземпляра, ссылается на Observer и так же имеет функции OnNext, OnCompleted и т. д.

Большое спасибо,

Пол

1 Ответ

1 голос
/ 14 декабря 2010

Мне кажется, ваш код должен работать. Если у вас возникли проблемы, я предлагаю вам их описать. Однако, если вы спрашиваете , как работает, то вам следует знать о замыканиях . Из Википедии:

В информатике замыкание - это первоклассная функция со свободными переменными, которые связаны в лексической среде. Такая функция называется «замкнутой» над своими свободными переменными. Замыкание определяется в области его свободных переменных, и степень этих переменных, по крайней мере, равна продолжительности жизни самого замыкания. Явное использование замыканий связано с функциональным программированием и с такими языками, как ML и Lisp. Замыкания используются для реализации стиля передачи продолжения и, таким образом, скрывают состояние. Таким образом, такие конструкции, как объекты и управляющие структуры, могут быть реализованы с помощью замыканий.

Это означает, что DoSomething и InstanceVariable доступны из любого метода, определенного в области, в которой они определены. Каждый раз при вызове конструктора MyClass будет создаваться новый «экземпляр» этих переменных.

...