Javascript 如何注册onclick事件以便它知道调用它的对象?
我有一些简单的HTML和Javascript代码: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);
<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
,你需要从“类定义”中提供一个实例
我用测试了第二个版本。谢谢。我不知道这个“呼叫”方法:)谢谢。我不知道这个“呼叫”方法:)谢谢。我不知道这个“呼叫”方法:)谢谢。我不知道这个“调用”方法:)