Javascript 在eventListener上应用';行不通
我试图在“内部”函数中使用“上部”函数中的一些值:Javascript 在eventListener上应用';行不通,javascript,events,Javascript,Events,我试图在“内部”函数中使用“上部”函数中的一些值: function Load(el, script) { el.addEventListener('click', function (e) { this.test = "testing"; script.apply(this, arguments); }, false); }; Load(document.getElementById("p
function Load(el, script)
{
el.addEventListener('click',
function (e)
{
this.test = "testing";
script.apply(this, arguments);
}, false);
};
Load(document.getElementById("panel"),
function (e)
{
alert(test); // test is undefined
});
上面的例子不起作用,它说test
未定义
但以下工作:
function A(B)
{
this.test = "bla";
B.apply(this);
}
function B()
{
alert(test);
}
A(B);
有什么区别?如何使其正常工作?
test
是元素在该点上的一个属性,因此您需要这样引用它:
Load(document.getElementById("panel"),
function (e)
{
alert(this.test); // "testing"
});
。区别在于,在第一个示例中,
这个
引用了id=“panel”
元素,并且在那里设置了属性。在第二个示例中,此
引用全局对象,或窗口
,因此test
是一个全局变量,当您访问它时,它会工作。test
是元素在该点上的一个属性,因此您需要像这样引用它:
Load(document.getElementById("panel"),
function (e)
{
alert(this.test); // "testing"
});
。区别在于,在第一个示例中,
这个
引用了id=“panel”
元素,并且在那里设置了属性。在第二个示例中,这个
指的是全局对象,或者说窗口
,因此测试
是一个全局变量,当您访问它时它就会工作。在第二个示例中,当您调用a()
时,这个
指的是窗口
对象,因为这是a()
运行的范围。所有全局变量也属于窗口
对象,因此在该上下文中,test
、this.test
和window.test
都是相同的实体
但是,在第一个示例中,
this
引用调用处理程序的元素,因此this.test
(已定义)与“#panel”相同。test
,但不同于test
和window.test
(未定义)。在第二个示例中,当您调用A()
时,此
指的是窗口
对象,因为这是A()
运行的范围。所有全局变量也属于窗口
对象,因此在该上下文中,test
、this.test
和window.test
都是相同的实体
但是,在第一个示例中,
this
引用调用处理程序的元素,因此this.test
(已定义)与“#panel”相同。test
,但不同于test
和window.test
(未定义)。您应该接受Nick Craver的回答,我只是在这里用更多的代码来说明:
function Load(el, script)
{
el.addEventListener('click',
function (e)
{
this.test = "testing"; // sets el.test="testing" ('cos this==el)
script.apply(this, arguments);
}, false);
};
Load(document.getElementById("panel"),
function (e)
{
alert(test); // alerts window.test, not el.test
});
你应该接受Nick Craver的回答,我只是在这里用一些代码来澄清:
function Load(el, script)
{
el.addEventListener('click',
function (e)
{
this.test = "testing"; // sets el.test="testing" ('cos this==el)
script.apply(this, arguments);
}, false);
};
Load(document.getElementById("panel"),
function (e)
{
alert(test); // alerts window.test, not el.test
});
嗯,谢谢!!是否有一种方法允许我引用
测试而不使用这个。
?@BrunoLM-不…你必须有一些上下文,除非它是全局或局部变量(并且不在处理程序中),你需要从它所在的对象引用它。@BrunoLM测试和这个。测试是两个不同的变量。你不能引用其中一个而得到另一个的值。嗯,谢谢!!是否有一种方法允许我引用测试而不使用这个。
?@BrunoLM-不…你必须有一些上下文,除非它是全局或局部变量(并且不在处理程序中),你需要从它所在的对象引用它。@BrunoLM测试和这个。测试是两个不同的变量。不能引用其中一个并获取另一个的值。