首页 理论教育JavaScript中this对象的含义及使用方法

JavaScript中this对象的含义及使用方法

【摘要】:this表示当前函数运行的上下文环境,也就是调用该函数的对象。图7.9.1this 指向 window调用函数getMaxNumber()时,this是全局对象window,在网页中显示this转换成字符串之后是"[object Window]"。图7.9.3this指向调用对象大部分情况下,只需要使用这两种形式访问this对象;少数情况下,可以通过特定方式修改this对象。图7.9.4使用apply()函数修改 this7.9.5.html调用函数的call()函数,传入指定参数并修改this对象,如下所示。

JavaScript本质上是基于原型链的面向对象编程语言。面向对象的编程语言有一个特色,它们的函数在运行时,内部有一个调用对象,用this表示。JavaScript的this关键字用来指向当前函数的调用对象。当函数进行简单调用时,this一般指向当前网页的window对象;当函数进行方法调用时,this指向拥有该函数的对象。

this表示当前函数运行的上下文环境,也就是调用该函数的对象。

1.this指向window

直接通过函数名调用函数时,浏览器会为函数绑定默认的this对象,即全局对象window。在这种情况下,因为this指向的对象都是同一个,所以基本不会操作this对象。

7.9.1.html在简单函数调用中访问this对象,如下所示。

动手写7.9.1

执行7.9.1.html,将this转换为字符串之后输出到网页,如下图所示。

图7.9.1 this 指向 window

调用函数getMaxNumber()时,this是全局对象window,在网页中显示this转换成字符串之后是"[object Window]"。

2.this指向调用对象

在函数运行时,面向对象编程语言的this指向的是当前封装的类的实例。在JavaScript中,主要有两种方式让this指向当前实例:

(1)使用new调用构造函数,this指向当前对象;

(2)使用对象调用函数,this指向当前对象。

7.9.2.html使用new操作符调用构造函数,并在构造函数中访问this对象,如下所示。

动手写7.9.2

执行7.9.2.html,将this转换为字符串之后输出到网页,如下图所示。

图7.9.2 this 指向当前对象

7.9.3.html调用对象的函数属性,如下所示。

动手写7.9.3

执行7.9.3.html,将this转换为字符串之后输出到网页,如下图所示。

(www.chuimin.cn)

图7.9.3 this指向调用对象

大部分情况下,只需要使用这两种形式访问this对象;少数情况下,可以通过特定方式修改this对象。

3.修改函数的调用对象

大部分的编程语言,在函数声明之后,this就不能修改了,但是JavaScript的this用法很灵活,允许通过多种方式修改函数运行时的this对象。主要有三种方式修改this对象:

(1)调用函数的apply()函数,传递参数数组,并修改this对象;

(2)调用函数的call()函数,传递指定参数,并修改this对象;

(3)将函数赋值给对象的属性,使用对象调用该函数。

在JavaScript中,所有函数都具有apply()、call()函数,调用这两个函数都可以实现函数调用;最后一种方式实际就是给对象设置函数属性。本节将介绍使用apply()、call()函数两种形式调用函数。

7.9.4.html调用函数的apply()函数,传入任意数量参数并修改this对象,如下所示。

动手写7.9.4

执行7.9.4.html,将this转换为字符串之后输出到网页,如下图所示。

图7.9.4 使用apply()函数修改 this

7.9.5.html调用函数的call()函数,传入指定参数并修改this对象,如下所示。

动手写7.9.5

执行7.9.5.html,将this转换为字符串之后输出到网页,如下图所示。

图7.9.5 使用call()函数修改this对象

apply()和call()函数达到的效果都一样,区别是前者可以传递任意数量的参数,后者必须传递指定数量的参数,因此在开发过程中会更多地使用call()修改this对象。

提示

在JavaScript中,函数运行时this指向的对象就是函数声明时所属的对象,但是可以通过apply()、call()等方式修改,因此this属于运行时绑定,这也是JavaScript动态性的一种表现。