onclick 不调用函数

onclick does not call function

本文关键字:函数 调用 onclick      更新时间:2023-09-26

当我运行以下代码时,会显示警报消息,但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()会运行。

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

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

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

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

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

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

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

但是在第二个上,

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