JavaScript中的this详解

this关键字表示对象

  • 在方法中,this表示该方法所属的对象;
  • 如果单独使用,this表示全局对象;
  • 在函数中,this表示全局对象;
  • 在函数中,在严格模式下,this是未定义的(undefined);
  • 在事件中,this表示接受事件的元素;
  • 类似call( )和apply( )方法可以将this引用到任何对象。

例:

1.方法中的this

1 <p id="demo"></p>
 2 <script>
 3     // 创建一个对象
 4     var person = {
 5         firstName: "John",
 6         lastName : "Doe",
 7         id     : 5566,
 8         fullName : function() {
 9             return this.firstName + " " + this.lastName;
10         }
11     };
12
13     // 显示对象的数据
14     document.getElementById("demo").innerHTML = person.fullName();

实例中,this 指向了 person 对象,因为 person 对象是 fullName 方法的所有者。

输出:John Doe

2.单独使用this

1 <p id="demo"></p>
2 <script>
3     var x = this;
4     document.getElementById("demo").innerHTML = x;
5 </script>

单独使用 this,则它指向全局(Global)对象。

在浏览器中,window 就是该全局对象为 [object Window]:

3.函数中使用this(默认)

1 <p id="demo"></p>
2 <script>
3     document.getElementById("demo").innerHTML = myFunction();
4     function myFunction() {
5         return this;
6     }
7 </script>

在函数中,函数的所属者默认绑定到 this 上。

在浏览器中,window 就是该全局对象为 [object Window]。

严格模式下:

1 <p id="demo"></p>
2 <script>
3     "use strict";
4     document.getElementById("demo").innerHTML = myFunction();
5     function myFunction() {
6         return this;
7     }
8 </script>

函数中,默认情况下,this 指向全局对象。

严格模式下,this 为 undefined,因为严格模式下不允许默认绑定:undefined

4.事件中的this

1 <body>
2 <button onclick="this.style.display='none'">点我后我就消失了</button>
3 </body>

在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素。

5.对象方法中的this

1 <body>
 2 <p id="demo"></p>
 3 <script>
 4     // 创建一个对象
 5     var person = {
 6         firstName  : "John",
 7         lastName   : "Doe",
 8         id     : 5566,
 9         myFunction : function() {
10             return this;
11         }
12     };
13     // 显示表单数据
14     document.getElementById("demo").innerHTML = person.myFunction();
15 </script>
16 </body>

在实例中,this 指向了 fullName 方法所属的对象 person。

输出:[object Object]

6.显示函数绑定

1 <body>
 2 <p id="demo"></p>
 3 <script>
 4     var person1 = {
 5         fullName: function() {
 6             return this.firstName + " " + this.lastName;
 7         }
 8     }
 9     var person2 = {
10         firstName:"John",
11         lastName: "Doe",
12     }
13     var x = person1.fullName.call(person2);
14     document.getElementById("demo").innerHTML = x;
15 </script>
16 </body>

在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。当我们使用 person2 作为参数来调用 person1.fullName 方法时, this 将指向 person2, 即便它是 person1 的方法。

输出:John Doe

(0)

相关推荐

  • JavaScript 函数 Apply

    方法重用 通过 apply() 方法,您能够编写用于不同对象的方法. JavaScript apply() 方法 apply() 方法与 call() 方法非常相似: 在本例中,person 的 fu ...

  • 前端开发技术之Vue3 相关基础知识点的整理分享

    多个根节点编辑器不会报错 Vue3是允许我们有多个根节点的,但是我们如果使用Vetur就会报错,不会影响运行,但是看起来就很烦.所以当我们转向Volar那么就不会出现这个问题了. image.png ...

  • JavaScript Number 对象的实际操作

    Number 对象Number 对象是原始数值的包装对象.创建 Number 对象的语法:var myNum=new Number(value);var myNum=Number(value);参数参 ...

  • 八字中的七杀详解

    七杀指男女命里的偏官无制,简称为"杀". 杀为刀,通常与羊刃一起并列为恶神,人命里逢之见之,为凶. 杀,当遇到环境好时,杀通常指一个人的威风八面,春风得意:为凶时,性格暴烈,恶贯满 ...

  • C/C++ 中 volatile 关键字详解 | 菜鸟教程

    C/C++ 中 volatile 关键字详解 | 菜鸟教程

  • 重装系统必须知道的UEFI/BIOS中英图文详解

    不同的电脑其BIOS设置界面也不相同,不过需要设置的选项是基本一致的,只是选项位置会有变化.除了知道怎么操作,最好能知道为什么这么做! 首先,按电脑电源按钮(或重启),当系统关闭电脑进入重启过程时反复 ...

  • Java中的多态详解

    一.多态的概念 多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表 ...

  • 中医典钟详解

    钟面简述(从内到外):太极图:核心圈为太极图,这个是普及性的常识,不再赘述.河图:第二圈由黑白点符号组成的是河图.相传,上古伏羲氏时,洛阳东北孟津县境内的黄河中浮出龙马,背负"河图" ...

  • 在VirtualBox中安装CentOS7详解(Mac版)

    在VirtualBox中安装CentOS7详解(Mac版)

  • 偏印的深度解析 八字十神中偏印详解

    偏印,有的书上也叫做枭神,但如若把所有的偏印都称之为枭神,这是错误的观点,称之为枭神的偏印是八字中有食神出现的才称之为枭(又名伤食.退神.吞啖杀),食神逢克才称之为枭,如八字,丁巳.辛亥.己卯.丁卯, ...

  • 聊聊《“缠中说禅”详解“论语”》(序)

    <临江仙> -缠中说禅 浊水倾波三万里,愀然独坐孤峰.龙潜狮睡候飙风.无情皆竖子,有泪亦英雄. 长剑倚天星斗烂,古今过眼成空.乾坤俯仰任穷通.半轮沧海上,一苇大江东. 我的心是越来越大了, ...

  • 聊聊《“缠中说禅”详解“论语”》(2)

    "道"的彰显,是"人"现世存在的当下涌现,离开当下.现世,只能是虚无缥缈的远景,与<论语>.儒家的"圣人之道"毫无瓜葛.这里,我 ...