如何在以下场景中保留此关键字

时间:2013-04-23 06:18:48

标签: javascript jquery

我正在开发骨干应用程序。我正在使用调用mousedown函数的骨干添加select事件。我在select内设置timeout,调用另一个函数selection。在selection函数中,我想使用currently clicked element来控制console.log(this.el)。但是,this.el未定义,因为这不是指我当前的模块。 如何保留此关键字,以便我可以在选择功能中使用它?

这是我的代码

    events: {
        'mousedown': 'select',
        'mouseup': 'deselect'
    },


    select: function () {
        this.timeoutId = setTimeout(this.selection, 1000);
    },

    deselect: function () {
        clearTimeout(this.timeoutId);
    },

    selection: function () {
        console.log(this.el);
    }

2 个答案:

答案 0 :(得分:2)

尝试:

var self = this;
self.timeoutId = setTimeout(function () {
    self.selection();
}, 1000);

或者:

this.timeoutId = setTimeout(this.selection.bind(this), 1000);

参考 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind

答案 1 :(得分:2)

你可以这样解决:

select: function() {
    var self = this;
    this.timeoutId = setTimeout(function() {
        self.selection();
    }, 1000);
}

许多浏览器也支持bind函数,它将对象绑定为this到函数

select: function() {
    this.timeoutId = setTimeout(this.selection.bind(this), 1000);
}