Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript—将附加参数传递到事件处理程序_Javascript_Events_Closures - Fatal编程技术网

javascript—将附加参数传递到事件处理程序

javascript—将附加参数传递到事件处理程序,javascript,events,closures,Javascript,Events,Closures,我有一个javascript对象,它有一些已定义的变量,并附加了一些事件处理程序。我希望事件处理程序能够访问定义的变量。有办法吗?事件处理程序在其自己的局部范围内,因此无法访问对象变量。有没有一种方法可以在不使用全局变量的情况下传递它们 我有一个想法,闭包可以解决这个问题,但我不知道如何解决 下面的代码将在页面加载时打印对象名称,但当您单击MapDOM对象时,它将显示名称未定义 非常感谢大家的帮助 科尔姆 地图测试 window.onload=函数(){ var e=新的EvtTest();

我有一个javascript对象,它有一些已定义的变量,并附加了一些事件处理程序。我希望事件处理程序能够访问定义的变量。有办法吗?事件处理程序在其自己的局部范围内,因此无法访问对象变量。有没有一种方法可以在不使用全局变量的情况下传递它们

我有一个想法,闭包可以解决这个问题,但我不知道如何解决

下面的代码将在页面加载时打印对象名称,但当您单击MapDOM对象时,它将显示名称未定义

非常感谢大家的帮助

科尔姆


地图测试
window.onload=函数(){
var e=新的EvtTest();
e、 printName();
e、 附件();
};
函数EvtTest(){
this.name=“EvtTest”;
}
EvtTest.prototype.name=null;
EvtTest.prototype.attachEvents=函数(){
var map=document.getElementById(“map”);
map.addEventListener('click',this.evtHandler,false);
};
EvtTest.prototype.printName=函数(){
console.log(“此名称:“+This.Name”);
};
EvtTest.prototype.evtHandler=函数(e){
e、 预防默认值();
console.log(“Name:+this.Name”);
};
html,正文{
身高:100%;
宽度:100%;
保证金:0;
背景色:红色;
}
#地图{
高度:300px;
宽度:300px;
背景颜色:黄色;
}

有点胡闹:

EvtTest.prototype.attachEvents = function () {
    var that = this;
    var map = document.getElementById("map");

    map.addEventListener ('click', function () {
        that.evtHandler();
    }, false);
};
现在
这个
内部
evtHandler
引用了您期望的对象

EvtTest.prototype.attachEvents = function () {
    var that = this;
    var map = document.getElementById("map");

    map.addEventListener ('click', function () {
        that.evtHandler();
    }, false);
};