this的理解与使用
文章目录
- 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的理解与使用相关推荐
- 通用解题法——回溯算法(理解+练习)
积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...
- stream流对象的理解及使用
我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...
- Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)
1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...
- java局部变量全局变量,实例变量的理解
java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...
- 智能文档理解:通用文档预训练模型
预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...
- 熵,交叉熵,散度理解较为清晰
20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...
- mapreduce理解_大数据
map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...
- 文件句柄和文件描述符的区别和理解指针
句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...
- 通俗理解条件熵-数学
就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...
- 通俗理解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 ...
最新文章
- [iOS]提交App报错ERROR ITMS -90207
- 现在c++都转go了
- cov/cor中有遗漏值_协调遗漏的效果–使用简单的NIO客户端/服务器测量回送延迟...
- 为什么tomcat在eclipse中启动了,访问不了
- 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法
- 世界首个机器人观音在岛国问世,请问AI开光还会远吗?
- Ubuntu安装gcc编译器
- Git可视化工具——SourceTree教程
- matlab圆锥曲线,Matlab软件在高中数学圆锥曲线学习过程中应用.doc
- java房屋租赁系统-房东租客系统PHP小程序
- Html炫酷代码例程
- 7-过零检测算法分析信号周期(app-designer
- Xposed模块开发
- C# Lambda 表达式
- 1.find如何快速查找、搜索文件
- javaee图书管理系统mysql,图书管理系统设计与实现—看这篇就够了
- c# rc4算法,加密解密类
- LeetCode 从零单刷个人笔记整理(持续更新)
- (三)模仿学习-Action数据的模仿
- 电脑插上扩展坞后会有显示的空盘符
热门文章
- win11安装python3环境
- uni-app获取上层路由的方法
- 原始套接字SOCK_RAW发送UDP数据包
- Android studio 突然连接不上雷电/夜神模拟器
- matlab求节点导纳矩阵,MATLAB节点导纳矩阵计算
- vue-router3 源码注释系列 /src/util/path.js
- 转载:16条有用的句子
- java jre怎么安装_Java Runtime Environment怎么安装 JRE安装详细图文教程
- IDEA少有人知道的快捷键Ctrl+Alt+v
- IT 巡检内容、工具、方法全面梳理