this的使用情况
this的几种使用情况
1、在普通函数内部,this指向的是window,在严格模式下,this的值是undefined
function fun(){
console.log(this);
}
fun();//Window
'use strict';
function fun(){
console.log(this);
}
fun();//undefined
2、在方法内部,this指向的是方法的拥有者
var user = {
name:'张三',
introduce:function(){
console.log(this.name);
}
}
user.introduce();//张三
上面的案例,this在introduce方法内部,introduce方法的拥有者是user,所以this指向user。
3、箭头函数内部的this指向的是,创建箭头函数时所在环境中this的值
var arrow = ()=>{
console.log(this);
}
arrow();//Window
上面案例中,创建箭头函数时arrow所在的环境是全局环境,所以this指向window
var Car = {
name:'奔驰',
run:function(){
var arrow = () =>{
console.log(this);
}
arrow();//{name: "奔驰", run: ƒ}
}
};
Car.run();
上面案例中,创建箭头函数时arrow所在的环境是run方法内,在run方法内部,this指向的是run方法的拥有者Car,所以this指向Car
4、在函数调用时使用了call、apply、bind函数后,this指向的是第一个参数
var fun = function(){
console.log(this);
}
fun.call(1);//Number {1}
上面案例中,本来this的指向是window,但是调用了call,this指向就是第一个参数。
5、在原型对象中的方法内,this指向的是实例化的对象
function Person(name){
this.name = name;
}
Person.prototype.introduce = function(){
console.log(this);
}
var xiaoming = new Person('小明'); xiaoming.introduce(); //Person {name: "小明"}
上面案例中,Person的原型对象方法是introduce,introduce内的this指向的是实例化对象xioaming
注:this的值必须是在函数运行时才能确定下来
var username = '张三';
var obj = {
username:'李四',
introduce:function(){
console.log(this.username);
}
}
var intro = obj.introduce;
obj.introduce(); //李四
intro(); //张三
上面案例中,intro()和obj.introduce()用的是同一个函数。我们先来看 obj.introduce(),调用的obj内部方法introduce,此时方法里的this指向的是obj,所以this.username是李四。 我们在来看intro();intro声明环境是全局,所以它是一个普通函数,在普通函数内部的this指向window,所以此时this.username是张三。
上述案例中,obj.introduce()和intro()虽然用的是同一个this,但是this的指向却不同。所以this的值只有在函数运行时才能确定下来。
this的使用情况的更多相关文章
- 有朋友问了数据库ID不连续,怎么获取上一篇和下一篇的文章?(不是所有情况都适用)
呃 (⊙o⊙)…,逆天好久没写SQL了,EF用的时间长了,SQL都不怎么熟悉了......[SQL水平比较菜,大牛勿喷] 方法很多种,说个最常见的处理 因为id是自增长的,所以一般情况下下一篇文章的I ...
- MySQL主从环境下存储过程,函数,触发器,事件的复制情况
下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...
- 萌新笔记——linux下查看内存的使用情况
windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...
- SQL Server 在缺少文件组的情况下如何还原数据库
SQL Server 在缺少文件组的情况下如何还原数据库 一.背景 我有一个A库,由于a,b两张表的数据量比较大,所以对表进行分区:在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为 ...
- 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...
- 数据库日常维护-CheckList_01历史Agent Job执行情况检查
检查Agent Job中日常维护作业或业务作业是否成功,如每天的备份.碎片整理.索引维护.历史备份文件清除等,可利用SSMS工具,通过CDC下面设置好的DB Server List,运行下面脚本一次, ...
- 排版紧凑情况下IOS 浏览器的文字部分选中问题
一.需求 一个每一项都是图文混排的列表页,在需要对其中的某一部分文字进行选中copy的时候,IOS个二货每次都是直接选中了整个列表项,无论怎么操作它的选框都没有办法做到部分选中. 这是我本周遇到遇到的 ...
- 如何在Windows Server 2008 R2没有磁盘清理工具的情况下使用系统提供的磁盘清理工具
今天,刚好碰到服务器C盘空间满的情况,首先处理了临时文件和有关的日志文件后空间还是不够用,我知道清理C盘的方法有很多,但今天只分享一下如何在Windows Server 2008 R2没有磁盘清理工具 ...
- 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...
随机推荐
- Java 第一次课堂测验
周一下午进行了开学来java第一次课堂测验,在课堂上我只完成了其中一部分,现代码修改如下: 先定义 ScoreInformation 类记录学生信息: /** * 信1805-1 * 胡一鸣 * 20 ...
- Java 进程占用内存过多,幕后元凶原来是线程太多
那天中午吃饭,一个同事说,那个项目组的人快气死我了,程序有问题,早晨在群里@了他们,到中午才回消息,然后竟然还说他们的程序没有问题,是我们这边调用的太频繁了. 简直想笑. 背景说明 我们当前这个系统和 ...
- 前端Tips#4 - 用 process.hrtime 获取纳秒级的计时精度
本文同步自 JSCON简时空 - 前端Tips 专栏#4,点击阅读 视频讲解 视频地址 文字讲解 如果去测试代码运行的时长,你会选择哪个时间函数? 一般第一时间想到的函数是 Date.now 或 Da ...
- 【转】vue1.0与2.0的一些区别
一.生命周期钩子的差别 vue1.0的生命周期如下: vue2.0的生命周期如下: 用一张表格来做对比: 二.代码片段 在vue1.0中可以在template编写时出现: <template&g ...
- JDK 和JRE区别
JDK,开发java程序用的开发包,JDK里面有java的运行环境(JRE),包括client和server端的.需要配置环境变量.... JRE,运行java程序的环境,JVM,JRE里面只有cli ...
- Git将一个项目同时从本地推送到GitHub和Gitee
前言 博主是根据自己的情况写这篇博文的,每个人遇到的情况和需求可能不一样哈,所以初始的步骤也不一定一致,但是同时推送到Github和Gitee的步骤都会是一致滴! Gitee拉取Github仓库 直接 ...
- 十大排序算法(Java实现)
一.冒泡排序(Bubble Sort) public class BubbleSort { public static void main(String[] args) { int[] arr = { ...
- [洛谷P3254] [网络流24题] 圆桌游戏
Description 假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为ri (i =1,2,--,m). 会议餐厅共有n 张餐桌,每张餐桌可容纳ci (i =1,2,--,n) ...
- java泛型梳理
java泛型梳理 概述 泛型,即参数化类型,是在JDK1.5之后才开始引入的. 所谓参数化类型是指所操作的数据类型在定义时被定义为一个参数,然后在使用时传入具体的类型. 这种参数类型可以用在类,接口, ...
- Referer防盗链
一.目录展示 分为AProject和BProject两个项目进行测试 二.修改c:\windows\system32\drivers\etc下的hosts文件 三.aindex.jsp 四.binde ...