我在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等功能。
非常感谢,
保
答案 0 :(得分:1)
在我看来,您的代码应该可行。如果您遇到任何问题,我建议您对其进行描述。但是,如果您要求 如何工作,那么您应该了解闭包。来自维基百科:
在计算机科学中,闭包是一个具有自由变量的第一类函数,它们绑定在词法环境中。据说这种功能是“封闭”其自由变量。闭包在其自由变量的范围内定义,并且这些变量的范围至少与闭包本身的寿命一样长。闭包的显式使用与函数式编程以及ML和Lisp等语言有关。闭包用于实现延续传递样式,并以这种方式隐藏状态。因此,可以使用闭包来实现诸如对象和控制结构之类的构造。
这意味着可以从定义它们的范围内定义的任何方法访问DoSomething
和InstanceVariable
。每次调用MyClass
构造函数时,都会有这些变量的新“实例”。