当我运行以下代码时,警报消息显示但是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()将会运行。
编辑:我在代码中添加了更多详细信息。
答案 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();
};
}