在Javascript中使用Reactive Framework订阅中的实例变量/方法

时间:2010-12-14 12:06:32

标签: javascript system.reactive reactive-extensions-js

我在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 个答案:

答案 0 :(得分:1)

在我看来,您的代码应该可行。如果您遇到任何问题,我建议您对其进行描述。但是,如果您要求 如何工作,那么您应该了解闭包。来自维基百科:

  

在计算机科学中,闭包是一个具有自由变量的第一类函数,它们绑定在词法环境中。据说这种功能是“封闭”其自由变量。闭包在其自由变量的范围内定义,并且这些变量的范围至少与闭包本身的寿命一样长。闭包的显式使用与函数式编程以及ML和Lisp等语言有关。闭包用于实现延续传递样式,并以这种方式隐藏状态。因此,可以使用闭包来实现诸如对象和控制结构之类的构造。

这意味着可以从定义它们的范围内定义的任何方法访问DoSomethingInstanceVariable。每次调用MyClass构造函数时,都会有这些变量的新“实例”。