1

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

编辑:我在我的代码中添加了更多细节。

4

2 回答 2

1

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

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

于 2013-09-29T03:25:23.570 回答
1

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

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

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

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

function SomeFunction() {

    that = this;

    document.onclick = function(e) {
        alert("Hi");
        that.test();
    };
}
于 2013-09-29T03:25:23.857 回答