文章目录

  • this的语法理解
  • 一、this的绑定方式
  • 二、两个细节
    • 1.严格模式
    • 2.如何更改this指向
  • 总结

this的语法理解

this在英文中是一个指示代词,表示  这;这个 

顾名思义,在编程于语言里,this就是一个指代作用。

我在人民广场吃着炸鸡

小明也在人民广场吃着炸鸡

人民广场还有跳广场舞的阿姨

还有三只小猫在人民广场睡觉

这样表达没毛病,但是太过繁琐,如果把重复的人民广场用   这  来代替,就会变成:

我在人民广场吃着炸鸡

小明也在这吃着炸鸡

这还有跳广场舞的阿姨

还有三只小猫在这睡觉

如果在写代码的时候, 太多对象名字重复使用,会使代码看起来繁琐,不简洁,乱等等,我们就可以使用this来解决这个问题。接下来具体看看this究竟有些什么语法,以及怎么用?


一、this的绑定方式

1.默认绑定

          function fn(){console.log(this);}fn()

我们可以看到,函数在全局调用的时候,this默认指向window对象

2.隐式绑定

         var obj ={name:'亚索',age:'20岁',height:'185cm',weight:'150斤',ziliao:function(){console.log('姓名:'+ this.name);console.log('年龄:'+ this.age);console.log('身高:'+ this.height);console.log('体重:'+ obj.weight);}}obj.ziliao()

我们通过上面这个例子可以看到,当我们调用一个对象的方法时,就会出现隐式绑定,this会指向对象。如果不用this,也可以把this换成obj,是一样的,只不过this更方便。此时this指向当前对象,翻译为这个名字,这个年龄,这个身高,这个体重。

3.显式绑定

     var lol = {name:'阿卡丽',whatName:function(){console.log('我最爱的英雄是'+this.name);}}var hero1 ={name:'卡特琳娜'}var hero2 ={name:'卢锡安'}lol.whatName.apply(hero1)lol.whatName.apply(hero2)lol.whatName.call(hero1)lol.whatName.call(hero2)

这种方法可以指定this的绑定对象。call()与apply()的效果是完全相同的

4.构造函数绑定

       function People(name) {this.name = name;this.favour = function() {console.log('我最喜欢的英雄是' + this.name);}}var name = '卡特琳娜'var Lovename = new People('阿卡丽')Lovename.favour();

当我们new一个构造函数,得到的这个实例,它继承了构造器的构造属性以及原型上的属性。

5.箭头函数绑定

其实箭头函数是没有this的,如果想在箭头函数中用this。那么一定要把箭头函数嵌套在一个作用域内部,箭头函数的this指向取决于外层作用域中的this,外层作用域或函数的this指向谁,箭头函数中的this就指向谁。这有点继承的意思,但更重要的是,箭头函数本身没有this,如果绑定成功,则没有办法修改。

二、两个细节

1.严格模式

严格模式即'use strict'

严格模式下,规定禁止this关键字指向全局对象window,此时this会绑定到undefined

    function fn(){'use strict'console.log(this);}fn()    //打印结果为undefined      // 'use strict'   是一种声明关键词,告诉浏览器,此时是严格模式。

2.如何更改this指向

一般的,我们常用call(),apply()方法来更改this指向

首先call(),apply()是函数自带的方法,在调用函数时,可以改变this指向。这一点在显示绑定里,有了详细的说明。

call方法接受的是一个实参列表,第一个实参指向this,其余实参赋给形参进入函数。

语法:

fn.call(this,参数2,参数3,参数4)

apply方法接受的是一个实参列表,第一个实参指向this,其余实参会在一个数组里,以数组为参数的形式赋值给形参进行传参

语法:

fn.apply(this,[参数2,参数3,参数4])

还有一个方法就是bind(),但是意义不大,有兴趣可以去MDN官网查看。


总结

1.this可用可不用,不用代码也能敲,需求也能实现,但用了方便

2.this常见的绑定方式,有默认绑定,隐式绑定,显式绑定,构造函数绑定,箭头函数绑定

3.严格模式下,规定this指向undefined

4.更改this指向的方法,常用call(),apply()

this的理解与使用相关推荐

  1. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  2. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  3. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  4. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  5. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  6. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  7. mapreduce理解_大数据

    map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...

  8. 文件句柄和文件描述符的区别和理解指针

    句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...

  9. 通俗理解条件熵-数学

    就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...

  10. 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积

    20210609 例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7. https://blo ...

最新文章

  1. [iOS]提交App报错ERROR ITMS -90207
  2. 现在c++都转go了
  3. cov/cor中有遗漏值_协调遗漏的效果–使用简单的NIO客户端/服务器测量回送延迟...
  4. 为什么tomcat在eclipse中启动了,访问不了
  5. 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法
  6. 世界首个机器人观音在岛国问世,请问AI开光还会远吗?
  7. Ubuntu安装gcc编译器
  8. Git可视化工具——SourceTree教程
  9. matlab圆锥曲线,Matlab软件在高中数学圆锥曲线学习过程中应用.doc
  10. java房屋租赁系统-房东租客系统PHP小程序
  11. Html炫酷代码例程
  12. 7-过零检测算法分析信号周期(app-designer
  13. Xposed模块开发
  14. C# Lambda 表达式
  15. 1.find如何快速查找、搜索文件
  16. javaee图书管理系统mysql,图书管理系统设计与实现—看这篇就够了
  17. c# rc4算法,加密解密类
  18. LeetCode 从零单刷个人笔记整理(持续更新)
  19. (三)模仿学习-Action数据的模仿
  20. 电脑插上扩展坞后会有显示的空盘符

热门文章

  1. win11安装python3环境
  2. uni-app获取上层路由的方法
  3. 原始套接字SOCK_RAW发送UDP数据包
  4. Android studio 突然连接不上雷电/夜神模拟器
  5. matlab求节点导纳矩阵,MATLAB节点导纳矩阵计算
  6. vue-router3 源码注释系列 /src/util/path.js
  7. 转载:16条有用的句子
  8. java jre怎么安装_Java Runtime Environment怎么安装 JRE安装详细图文教程
  9. IDEA少有人知道的快捷键Ctrl+Alt+v
  10. IT 巡检内容、工具、方法全面梳理