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的使用情况的更多相关文章

  1. 有朋友问了数据库ID不连续,怎么获取上一篇和下一篇的文章?(不是所有情况都适用)

    呃 (⊙o⊙)…,逆天好久没写SQL了,EF用的时间长了,SQL都不怎么熟悉了......[SQL水平比较菜,大牛勿喷] 方法很多种,说个最常见的处理 因为id是自增长的,所以一般情况下下一篇文章的I ...

  2. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  3. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  4. 萌新笔记——linux下查看内存的使用情况

    windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...

  5. SQL Server 在缺少文件组的情况下如何还原数据库

    SQL Server 在缺少文件组的情况下如何还原数据库 一.背景 我有一个A库,由于a,b两张表的数据量比较大,所以对表进行分区:在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为 ...

  6. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库

    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...

  7. 数据库日常维护-CheckList_01历史Agent Job执行情况检查

    检查Agent Job中日常维护作业或业务作业是否成功,如每天的备份.碎片整理.索引维护.历史备份文件清除等,可利用SSMS工具,通过CDC下面设置好的DB Server List,运行下面脚本一次, ...

  8. 排版紧凑情况下IOS 浏览器的文字部分选中问题

    一.需求 一个每一项都是图文混排的列表页,在需要对其中的某一部分文字进行选中copy的时候,IOS个二货每次都是直接选中了整个列表项,无论怎么操作它的选框都没有办法做到部分选中. 这是我本周遇到遇到的 ...

  9. 如何在Windows Server 2008 R2没有磁盘清理工具的情况下使用系统提供的磁盘清理工具

    今天,刚好碰到服务器C盘空间满的情况,首先处理了临时文件和有关的日志文件后空间还是不够用,我知道清理C盘的方法有很多,但今天只分享一下如何在Windows Server 2008 R2没有磁盘清理工具 ...

  10. 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...

随机推荐

  1. 低秩稀疏矩阵恢复|ADM(IALM)算法

    一曲新词酒一杯,去年天气旧亭台.夕阳西下几时回? 无可奈何花落去,似曾相识燕归来.小园香径独徘徊. ---<浣溪沙·一曲新词酒一杯>--晏殊 更多精彩内容请关注微信公众号 "优化 ...

  2. .Net Core 导出Html到PDF

    前言 最近由于项目的需求问题,涉及到了在.Net Core中导出PDF的一个问题,最后选择方式是后端拼接到Html页面然后再通过Html导出到PDF.中间也尝试了许多的NuGet包.但是并不如意,可用 ...

  3. 使用zipwithindex 算子给dataframe增加自增列 row_number函数实现自增,udf函数实现自增

    DataFrame df = ...StructType schema = df.schema().add(DataTypes.createStructField("id", Da ...

  4. Java框架之MyBatis 06-全局配置-mapper映射-分步查询

    MyBatis MyBatis是Apache的一个开源项目iBatis, iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架. iBatis  提供的持 ...

  5. EsClientRHL-elasticsearch java客户端开源工具

    EsClientRHL是一个可基于springboot的elasticsearch 客户端调用封装工具,通过elasticsearch官网推荐的RestHighLevelClient实现,内置了es索 ...

  6. 第二阶段冲刺个人任务——six

    今日任务: 搭建网络服务器,上传数据库及程序. 昨日成果: 合并程序(统计团队博客).

  7. mybatis in查询

    原文地址:https://blog.csdn.net/u012427355/article/details/79580561 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集 ...

  8. Ninject 初步 -Getting Started with Ninject 精通ASP-NET-MVC-5-弗瑞曼 Listing 6-10

  9. centos MySQL安装与卸载

    1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:https://dev.mysql.com/downloads/repo/yum/ wget http://dev.mysql.com/g ...

  10. IdentityServer4身份认证授权入门

    一.简介 IdentityServer4 是为ASP.NET Core 系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架 特点: 1.认证服务 2.单点登录登出( ...