window.alert(this)应该始终是对象窗口?

时间:2014-12-11 03:06:17

标签: javascript this alert

我们知道,

  

当一个函数作为一个对象的方法被调用时,它的this被设置为调用该方法的对象。


加入:

上述声明来自此网站this - JavaScript | MDN

我不明白是 作为对象方法 ,正如它所说的那样,“this”在对象(窗口)的方法(alert)中,所以它应该是引用“窗口”对象吗?


现在,我的问题是:

window.alert(this)

在这种情况下,this位于方法window.alert中,因此它将始终返回对象窗口。 我的思考过程有什么不对吗?


更新:       非常感谢你们,我想我几乎明白了:       当window.alert(this),this  是一个参数,而不是方法中的this。这是我的理解。是不是?

为了确保这一点,我需要知道如何在javascript中定义alert。有什么想法指导我阅读相关文件吗?

2 个答案:

答案 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]
}
相关问题