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
测试
这个。测试
是两个不同的变量。不能引用其中一个并获取另一个的值。