【问题标题】:How do I pass a JavaScript class instance to DOM Event Listener?如何将 JavaScript 类实例传递给 DOM 事件侦听器?
【发布时间】:2010-11-08 04:07:30
【问题描述】:

我遇到了一个非常棘手的情况。我想将一个对象的实例传递给由同一个对象实例创建的 DOM 元素的事件侦听器(如果有意义的话)。

function Object(callback){
    this.callback = callback;
    this.node = document.createElement('div');
    this.send = function(){
        document.getElementById('list').appendChild(this.node);
    }
    this.node.addEventListener('click',function(){/*this.callback() of Object instance needs to go here*/},true);
}

我知道使用 callback() 可以在事件侦听器中工作,但这不是我需要的,因为我将使用实例中的变量,这些变量稍后不会从构造中传递。

我该如何解决这个问题?

【问题讨论】:

    标签: javascript dom object


    【解决方案1】:

    匿名函数改变了this的含义。为了能够在处理程序中使用它,请使用另一个 var,或者不要创建另一个函数:

    var elem = this;
    this.node.addEventListener('click',function(){ elem.callback(); },true);
    

    this.node.addEventListener('click', this.callback, true);
    

    【讨论】:

    • 还有一个问题,elem 是仅在定义时评估还是在事件触发时再次评估?如果事件触发时没有,有什么方法可以做到这一点?
    • 只有在评估外部函数时才会评估它。 elem 被存储以在回调被触发时使用,但它总是引用同一个实例;如果同时更改实例,elem 将反映更改(只有一个实例,它不会被复制,elem 只是成为它的另一个引用)。我看不出为什么您需要在事件触发时再次运行分配。
    • 这正是我所需要的!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多