我们知道,
当一个函数作为一个对象的方法被调用时,它的
this
被设置为调用该方法的对象。
加入:
上述声明来自此网站this - JavaScript | MDN
我不明白是 作为对象方法 ,正如它所说的那样,“this”在对象(窗口)的方法(alert)中,所以它应该是引用“窗口”对象吗?
现在,我的问题是:
window.alert(this)
在这种情况下,this
位于方法window.alert
中,因此它将始终返回对象窗口。
我的思考过程有什么不对吗?
更新:
非常感谢你们,我想我几乎明白了:
当window.alert(this),this
是一个参数,而不是方法中的this
。这是我的理解。是不是?
为了确保这一点,我需要知道如何在javascript中定义alert
。有什么想法指导我阅读相关文件吗?
答案 0 :(得分:0)
window.alert(this)
将获取this
的当前值,并将其作为参数传递给alert()
函数。 this
的当前值完全取决于window.alert(this)
所在的上下文。它可能是window
,也可能指向其他对象。我们必须看到包含的代码才能确定。
例如,如果您这样做:
var x = {
callme: function() {
alert(this); // alerts the x object
}
};
x.callme();
然后,警报会显示x
对象,因为this
函数通过callme()
调用时x.callme()
内部的值{/ 1}}。
在普通函数调用的严格模式下,this
将为undefined
。所以,它在很大程度上取决于上下文:
function hello() {
"use strict";
alert(this); // alerts undefined
}
hello();
或者,不是严格模式:
function hello() {
alert(this); // alerts the window object (in a browser)
}
hello();
答案 1 :(得分:0)
试试这个:
<div id="that" onclick="window.alert(this.id)">Click me.</div>
调用方法(onclick)的对象是div
元素。它确实取决于当前的范围。也许读一读。
更新:
以下是一个类似的示例,其中this
在两个不同的范围内将具有两个不同的值。
var div = document.querySelector('#that');
div.onclick = function() {
alert(this); // [object HTMLDivElement]
functionDeclaredInGlobalScope();
}
functionDeclaredInGlobalScope() {
alert(this); // [object Window]
}
单击div
时,方法开始执行。该方法是onclick
。调用该方法的对象是div
,因为这个例子有点清楚。因此,this
将等于div
元素。但是,在onclick
中,我们调用了一个在gloabal范围内定义的函数(这意味着它实际上只是window
的一种方法)。当我们开始执行functionDeclaredInGlobalScope
时,会创建一个新范围,并为this
分配一个不同的值,但它是相同的过程:方法是functionDeclaredInGlobalScope
,它的对象是呼叫是window
。获得this
后,您可以将其分配给变量,或者将其传递到您想要保留的任何位置。例如:
div.onclick = function() {
alert(this); // [object HTMLDivElement]
functionInGlobalScope(this);
}
functionDeclaredInGlobalScope(that) {
alert(that); // [object HTMLDivElement]
alert(this); // [object Window]
}