首先,我首先得出一个结论,在Javascript中,这个关键字总是指向函数(方法)的所有者。

功能
复制代码代码如下所示:
函数引入(){
警报(你好,我是laruence R;
}

对于这个函数,这个关键字指向谁

正如我在前面的文章(Javascript范围)中提到的,函数在全局函数中定义,函数的所有者是当前页面,也就是窗口对象。

这就是为什么,我要引入一个带有引号的函数,因为全局函数的定义实际上是窗口对象的一种方法。

所以我们可以直接通过函数名或窗口调用。方法名称。此时,该方法中的关键字引用其所有者:窗口对象。

如果我们查看窗口的引入属性,我们得到以下内容:
复制代码代码如下所示:
变量名=我laruence ;
函数引入(){
警报(这个名字);
}
警报(窗口,介绍);

如果你看上面的代码,你可能会认为既然全球功能是窗口对象的方式,和全局变量的属性窗口对象(的JavaSript范围已经提到),我们可以通过这个关键词在全局函数访问全局变量

答案是肯定的,如果你打电话给介绍的功能,你会发现,我是Laruence。

事件处理函数

也许,这个关键字混乱的原因大部分是因为在事件处理中使用了函数(方法)。
复制代码代码如下所示:
例如,当我们单击名称输入框时,我们需要显示名称输入框的值。然后,您可以编写以下代码:

功能showvalue(){
警报(这个值);
}
document.getelementbyid('name')。Onclick = showvalue;

上面的代码运行正常,但是为什么呢这不是意味着函数的指针总是指向函数的所有者吗全局变量的所有者不是窗口对象吗

哈哈,如果你能想到这个问题,那就意味着你在认真看我的文章,否则,我建议你从头开始,否则,看完后,你还是会感到困惑。

嗯,是的,上述代码,showvalue是全局对象定义,如此看来,这个问题只能发生在onclick事件绑定时间。

我们知道在JS的一切东西都是对象,而函数和方法是一个对象的属性,而是一个函数都有一个可执行的内部属性。所以,上述代码,当onclick绑定到处理器,它实际上是对名称输入框的DOM对象的onclick属性一个值。

这是我们给showvalue复制功能的名称输入框对象的onclick属性。如果我们看看此时的onclick:
复制代码代码如下所示:
功能showvalue(){
警报(这个值);
}
document.getelementbyid('name')。Onclick = showvalue;
警报(document.getelementbyid('name')。Onclick);

因此,当事件被触发时,它将调用的名称输入框onClick方法。此时,这个关键字自然指向名称输入框。

但令人困惑的事情出现了,例如:
复制代码代码如下所示:
功能showvalue(){
警报(这个值);
}


它不能正常工作,为什么

因为在这个时候,它不是一个任务,而是一个参考。

如果我们注意到两个onclick写作,你会发现,以往的方法,我们使用:

dom.onclick = showvalue; / /没有调用操作符

对于刚才的方法:

onclick=showvalue() / /电话。

这也可以反映出两者之间的区别:前者是一种任务,并指后者。如果我们看看此时的输入框的onclick属性,我们得到:

警报(DOM。onclick);

看到区别了吗你知道是为什么吗

这里有一个非常有趣的例子,可以在IE下试用:



改变这个方向

好了,既然我们知道为什么了,我们怎么能把这一点指向我们想要指出的呢

对于上面的事件处理函数,我们可以编写以下方法:

dom.onclick = showvalue();
Dom.onclick =函数(){ alert(这个值);}
我们只是想一下,这是如何嵌入句子的。
Dom.addEventListener(DOM,showvalue,false); / / FF只有

对于不是事件处理函数的场合,我们可以使用应用或调用来更改该关键字的方向。

例如:
复制代码代码如下所示:
VaR laruence = { {
名称:'laruence,
年龄:26岁,
职位:高级PHP工程师,
公司:'baidu公司。
};

函数引入(){
警报(这个名字);
}

introduce.call(laruence);