Javascript:onclick不调用函数

时间:2013-09-29 03:22:30

标签: javascript javascript-events

当我运行以下代码时,警报消息显示但是this.test()没有运行。

function SomeFunction() {
    document.onclick = function(e) {
        alert("Hi");
        this.test();
    };
}

SomeFunction.prototype.test = function (){
    ...
}

然而,当我尝试这个时:

function SomeFunction() {
    document.onclick = this.test();
}

SomeFunction.prototype.test = function (){
    ...
}

this.test()将会运行。

编辑:我在代码中添加了更多详细信息。

2 个答案:

答案 0 :(得分:1)

在第一个例子中,单词“this”指的是函数本身。因此功能测试将超出其范围。

但是在第二个上你告诉代码this.test()是实际的onclick函数,这就是为什么它在那里工作而不是第一个。

答案 1 :(得分:1)

您的问题与范围有关。试试:

document.onclick = function(e) {
    alert("Hi");
    test();
};

this会根据调用的位置而有所不同。在第一个示例中,您是从匿名函数中调用它,因此this的范围转移到该函数内部。在第二个示例中,范围是更高级别,并引用您的SomeFunction()函数。

由于您的函数嵌套在另一个函数中,您可能希望将this重新分配给可在作用域链上访问的另一个变量。 E.g。

function SomeFunction() {

    that = this;

    document.onclick = function(e) {
        alert("Hi");
        that.test();
    };
}