Javascript 回调函数不使用';看不见';这';

Javascript 回调函数不使用';看不见';这';,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我的回调函数没有看到“this” 这是我绑定按键的代码: initialize: function () { $(document).bind('keyup', this.keyPress); _.bindAll(this, 'rotate'); }, rotate: function (event) { //smth... } 以下是功能按键: keyPress: function(event)

我的回调函数没有看到“this”

这是我绑定按键的代码:

     initialize: function () {
        $(document).bind('keyup', this.keyPress);
        _.bindAll(this, 'rotate');
     },
     rotate: function (event) {
        //smth...
     }
以下是功能按键:

     keyPress: function(event) {
        console.log(event.keyCode);
        var pageX = 0, pageY = 0;
        var ev = new Object();
        ev.pageY = pageY;
        ev.pageX = pageX;

        func = this.rotate;
        func(ev);
        //also I tried like this:
        //this.rotate(ev);
    }
这是一个错误:“未捕获类型错误:未定义不是函数”

我搞不懂


我会非常感谢你的帮助,谢谢

这里的问题是,在JQuery中,bind添加了一个事件侦听器,它没有设置“this”的上下文

您需要使用下划线将该方法绑定到上下文

e、 g


这将确保“this”引用正确的对象

理想情况下,您需要显示更多的代码,因此我们可以更好地了解事物的范围,以及
实际上是什么
引用,而
keyPress
hander在哪里定义?你也可以在函数本身绑定上下文-keyPress:function(e){…}。bind(this)@LouisK:但是
this
不会是定义
keyPress
时的实例,
this
可能是当时的
window
$(document).bind('keyup',this.keyPress.bind(this))
可以工作,或者
.\bindAll(this,'rotate','keyPress')$(document).bind('keyup',this.keyPress)
。如果删除此视图或创建另一个视图,则仍会保留对
文档的零散绑定。这个绑定应该有一个
remove
覆盖,它可以更好地使用
.bindAll
方法(或事件名称空间)。当然,在替换视图之前,管理视图的任何人都需要调用
remove
 initialize: function () {
    $(document).bind('keyup', _.bind(this.keyPress, this));
    _.bindAll(this, 'rotate');
 },
 rotate: function (event) {
    //smth...
 }