【发布时间】:2016-09-12 12:28:16
【问题描述】:
我认为 JS 范围再也不会让我感到惊讶了,但现在我们来了。
我正在使用这个little JQuery plugin for observer like pattern。 这就是我如何订阅和取消订阅自定义事件的处理程序(监听器)
$.observer.subscribe('my-event', this.myHandler);
$.observer.unsubscribe('my-event', this.myHandler);
public myHandler() {
console.log("hello World", this);
}
问题是,如果我使用类方法作为回调 (this.myHandler),则该方法将不会在类范围内而是在观察者对象范围内被调用。
当我像这样使用 JQuery 的代理方法时:
$.observer.subscribe('my-event', $.proxy(this.myHandler, this));
$.observer.unsubscribe('my-event', $.proxy(this.myHandler, this));
处理程序中的范围是正确的,但取消订阅方法停止工作,显然使用代理我正在取消订阅其他东西,而不是处理程序方法。
我不能使用定义局部变量的旧 JS 技巧并使用它来代替这个,比如
var o = this;
public myHandler() {
console.log("hello World", o);
}
因为这是一个 typescript 类,而 var 有不同的含义。
我该怎么办?
【问题讨论】:
-
不是this - 没有双关语 - 重复吗?在这种特殊情况下,我会使用一个临时变量来存储
$.proxy调用的结果。 -
@raina77ow 箭头函数和 &.proxy 方法有同样的问题,取消订阅不起作用 - 我不明白为什么。
-
@raina77ow 对不起,你是对的,我只是在我的代码中做错了
标签: javascript typescript this