对象方法作为回调函数

时间:2013-07-20 14:51:51

标签: javascript

我有以下代码:

function Obj() {
    var container = [1, 2, 3];
    this.callback_m = function() {
        if (obj.exists(this)) {
            //...
        };
    }
    this.exists = function(element) {
        return !(container.indexOf(element) == -1);
    }
}

var obj = new Obj();
$(".elem").on('click', obj.callback_m);

我正在使用对象的方法作为回调函数。很明显,当调用此方法时,“this”被设置为触发事件的元素。我将'this'元素传递给对象的'exists'方法,以查看它是否存在于集合中。但是,要获得'exists'方法,我需要引用引用我的对象的'obj'变量。

obj.exists(this)

但这肯定是一个错误的选择,因为'obj'可能有不同的名称或超出范围。我不能在这里使用bind()因为我需要引用事件被触发的元素的引用。

我想出的唯一解决方案是使用闭包来记住对自身的引用。这就是它现在的样子:

function Obj() {
    var container = [1, 2, 3];
    var self = this;
    this.callback_m = function() {
        if (self.exists(this)) {
            //...
        };
    }
    this.exists = function(element) {
        return !(container.indexOf(element) == -1);
    }
}

这个问题还有其他解决办法吗?我想出的apporoach有哪些潜在的问题?

0 个答案:

没有答案