如何注册一个onclick事件,以便它知道从哪个对象调用它
How to register an onclick event so it knows the object it is called from?
我有一些简单的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);
});
我想在console.log()中使用"this",但我希望它引用hello的实例。如何更改Hello的定义?
您可以使用Function#call
,它允许您将this
绑定到您想要的任何内容:
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);
}
}
在你的这个。测试功能替换:
fun(e);
:
fun.call(that, 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);
});
我用这把小提琴测试了一下。
编辑:不确定我第一次完全阅读了这个问题,但是如果你想从函数内访问Hello
,你需要从你的"类定义"中提供它的实例。
function Hello(el)
{
var self = this;
var el = document.getElementById('test');
this.test = function(fun)
{
el.addEventListener('click', function(e)
{
fun(e, self); // Adding the parameters to pass
}, false);
}
this.someProperty = "to test the value";
}
var hello = new Hello();
hello.test(function(event, obj) // The passed function should be ready to receive it
{
alert(obj.someProperty);
});
我用这个提琴更新测试了第二个版本
相关文章:
- JQuery Deferred Ajax,将结果保存在调用对象中
- 无法从JavaScript中的函数调用对象属性
- 在Javascript中调用对象方法时不是函数类型错误
- 正在调用对象中设置的匿名函数,但未得到预期结果
- 为什么需要“this”来调用对象内部的函数
- 如何从onClick事件调用对象函数
- 是否可以在不加对象名称前缀的情况下调用对象的函数
- 对象-在定义对象之前先调用对象
- console.log表示,当我调用对象的任何成员时,对象都是未定义的
- 正在调用对象的方法
- console.log是否调用对象的toString方法
- Javascript”;无效的调用对象“;xml错误
- 如何在javascript中调用对象键(codecademy)
- 如果我丢失了调用对象,如何杀死 setInterval()/setTimout()
- 如何在对象生成器外部调用对象属性值
- JavaScript:动态调用对象内的函数
- 如何动态加载 JavaScript 对象或调用对象方法
- IE9 在 iframe 中打印 PDF 时出现“无效调用对象”
- 在方法调用对象之外访问变量而不使它们全局化(可能吗?
- Javascript - 在对象中调用对象的方法,给出错误:“对象没有方法getStartPoint”