JavaScript事件回调函数作用域问题与此有关?

JavaScript事件回调函数作用域问题与此有关?,javascript,Javascript,我理解这个概念有点困难。我有一个循环,在其中我将事件和处理程序分配给元素。问题是,在回调中,我还访问了一个成员函数。我设置了范围以获取正确的此(指我的对象),但对于e.target,我没有获得正确的元素。所以我想我也需要正确的元素。下面是代码 for(var i in type) { element.addEventListener(type[i].toLowerCase(), (function (_self, handler) { //Handle this reference in

我理解这个概念有点困难。我有一个循环,在其中我将事件和处理程序分配给元素。问题是,在回调中,我还访问了一个成员函数。我设置了范围以获取正确的
(指我的对象),但对于
e.target
,我没有获得正确的元素。所以我想我也需要正确的元素。下面是代码

for(var i in type) {
    element.addEventListener(type[i].toLowerCase(), (function (_self, handler) { //Handle this reference in event callback  
        //Using a closure to return callback with correct context                   
        return function (event) {
            //console.log(arguments);
            //console.log(this);
            _self[handler].apply(_self, arguments);
        }
    }(this, type[i])), capture);
}
现在在我的处理函数中:

dragStart: function (e) {
    console.log(e);
    var that = e.target,
        sectionName = that.id,
        interactionTarget = that.childNodes[0].alt;

    e.dataTransfer.effectAllowed = 'move';
    e.dataTransfer.setData('text/html', that.innerHTML);
    this.dragSrcEl = that;
    that.classList.add('fade');
    this.triggerEvent("whatever");
},

triggerEvent
是一个成员函数。我想要的是与我的对象对应的正确的
这个
,也是我的事件绑定到的正确元素。

我想我理解你现在的要求。我可以这样做:

for(var i in type) {
    element.addEventListener(
        type[i].toLowerCase(), 
        this[type[i]].call(this, element), 
        capture)
}
和dragStart:(如果使用ES5)

如果需要支持较旧的IE:

dragStart: function (element) {
    var self = this
    return function(e){
        //self === original object
        //element === listening element
        //e.target === firing element
    }
}

使用
\u self[handler]。应用(\u self,this),似乎您希望执行
\u self[handler]。调用(\u self,event)相反,除非我遗漏了什么对不起,实际上这是调试和挣扎的结果。实际上我想传递
参数
Hmm。在这种情况下,您不应该改为执行
element.addEventListener(type[I].toLowerCase(),this[type[I]].bind(this)),capture)
?这应该是你想要的。是的,这是另一种方法。但主要问题依然存在。上下文现在已更改为
object
,回调中的
this
现在指的是我的对象。但是,当我们使用“this
时,如果没有绑定,那么元素本身会怎么样呢。如何访问它
e.target`不是我想要的..这是实际单击的元素,而不是具有侦听器的元素。e.srcElement是您要找的吗?
dragStart: function (element) {
    var self = this
    return function(e){
        //self === original object
        //element === listening element
        //e.target === firing element
    }
}