Javascript 如何注册onclick事件以便它知道调用它的对象?

Javascript 如何注册onclick事件以便它知道调用它的对象?,javascript,Javascript,我有一些简单的HTML和Javascript代码: <span id="test">Hej</span> function Hello(el) { var el = document.getElementById('test'); this.test = function(fun) { el.addEventListener('click', function(e) { fun(e);

我有一些简单的HTML和Javascript代码:

<span id="test">Hej</span>

function Hello(el)
{
    var el = document.getElementById('test');
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun(e);
        }, false); 
    }
}   

var hello = new Hello;
hello.test(function()
{
    console.log(this);
});
Hej
函数Hello(el)
{
var el=document.getElementById('test');
this.test=功能(乐趣)
{
el.addEventListener('click',函数(e)
{
乐趣(e);
},假);
}
}   
var hello=新hello;
hello.test(function())
{
console.log(this);
});
我想在console.log()中使用“this”,但我希望它引用hello的实例。 我应该如何更改Hello的定义?

您可以使用
函数#call
,它可以将
绑定到您想要的任何内容:

function Hello(el)
{
    var el = document.getElementById('test');
    var that = this;
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun.call(that, e);
        }, false); 
    }
}
查看此图。

您可以使用
函数#call
,它可以将
绑定到您想要的任何内容:

function Hello(el)
{
    var el = document.getElementById('test');
    var that = this;
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun.call(that, e);
        }, false); 
    }
}
查看此图。

您可以使用
函数#call
,它可以将
绑定到您想要的任何内容:

function Hello(el)
{
    var el = document.getElementById('test');
    var that = this;
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun.call(that, e);
        }, false); 
    }
}
查看此图。

您可以使用
函数#call
,它可以将
绑定到您想要的任何内容:

function Hello(el)
{
    var el = document.getElementById('test');
    var that = this;
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun.call(that, e);
        }, false); 
    }
}

请参见。

中的this.test函数替换:

fun(e);
与:

并在事件侦听器之前添加以下内容:

var that = this;

在this.test函数中,替换:

fun(e);
与:

并在事件侦听器之前添加以下内容:

var that = this;

在this.test函数中,替换:

fun(e);
与:

并在事件侦听器之前添加以下内容:

var that = this;

在this.test函数中,替换:

fun(e);
与:

并在事件侦听器之前添加以下内容:

var that = this;

您需要将其传递给传递的函数。通过在指定的侦听器函数中使用
this
关键字,方法
addEventListener
已经为您提供了访问调用元素的权限。因此,为了使这个对象成为您的“fun”函数,它需要作为变量传递

function Hello(el)
{
    var el = document.getElementById('test');
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun(e, this);   // Adding the parameters to pass
        }, false); 
    }
}   

var hello = new Hello();
hello.test(function(event, el)  // The passed function should be ready to receive it
{
    alert(el.innerText);  
});
我试了一下

Edit:我不确定我第一次是否完整地阅读了这个问题,但是如果你想从函数中访问
Hello
,你需要从“类定义”中提供一个实例


我使用测试了第二个版本。

您需要将其传递给传递的函数。通过在指定的侦听器函数中使用
this
关键字,方法
addEventListener
已经为您提供了访问调用元素的权限。因此,为了使这个对象成为您的“fun”函数,它需要作为变量传递

function Hello(el)
{
    var el = document.getElementById('test');
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun(e, this);   // Adding the parameters to pass
        }, false); 
    }
}   

var hello = new Hello();
hello.test(function(event, el)  // The passed function should be ready to receive it
{
    alert(el.innerText);  
});
我试了一下

Edit:我不确定我第一次是否完整地阅读了这个问题,但是如果你想从函数中访问
Hello
,你需要从“类定义”中提供一个实例


我使用测试了第二个版本。

您需要将其传递给传递的函数。通过在指定的侦听器函数中使用
this
关键字,方法
addEventListener
已经为您提供了访问调用元素的权限。因此,为了使这个对象成为您的“fun”函数,它需要作为变量传递

function Hello(el)
{
    var el = document.getElementById('test');
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun(e, this);   // Adding the parameters to pass
        }, false); 
    }
}   

var hello = new Hello();
hello.test(function(event, el)  // The passed function should be ready to receive it
{
    alert(el.innerText);  
});
我试了一下

Edit:我不确定我第一次是否完整地阅读了这个问题,但是如果你想从函数中访问
Hello
,你需要从“类定义”中提供一个实例


我使用测试了第二个版本。

您需要将其传递给传递的函数。通过在指定的侦听器函数中使用
this
关键字,方法
addEventListener
已经为您提供了访问调用元素的权限。因此,为了使这个对象成为您的“fun”函数,它需要作为变量传递

function Hello(el)
{
    var el = document.getElementById('test');
    this.test = function(fun)
    {
        el.addEventListener('click', function(e)
        {
            fun(e, this);   // Adding the parameters to pass
        }, false); 
    }
}   

var hello = new Hello();
hello.test(function(event, el)  // The passed function should be ready to receive it
{
    alert(el.innerText);  
});
我试了一下

Edit:我不确定我第一次是否完整地阅读了这个问题,但是如果你想从函数中访问
Hello
,你需要从“类定义”中提供一个实例


我用测试了第二个版本。

谢谢。我不知道这个“呼叫”方法:)谢谢。我不知道这个“呼叫”方法:)谢谢。我不知道这个“呼叫”方法:)谢谢。我不知道这个“调用”方法:)