this的用法-(2019-3)
作为前端程序员,this应该不会陌生,指执行期的上下文,以下总结了this的几种场景:
1、全局作用域下,this指的就是Window,在控制台输出this,返回的是Window对象

2、在一般函数中,this也是指代Window
function f(){
    console.log(this);
}
f();
输出的依旧是Window对象
3、定义一个对象,在对象中定义成员函数,通过对象的形式调用函数时,this指代的就是这个对象,谁调用函数,this指代的就是谁。和情况2原理一样,f函数定义在全局作用域下,f() = window.f(),所以指向window
var obj = {   
   f:function(){
        console.log(this);
    }
};
obj.f();//输出obj
var obj2 = obj.f;
obj2();// =window.obj2();输出Window对象
4、在new的构造函数中,this指向正在创建的对象
function FF(){
    console.log(this);//输出FF
}
var a = new FF();
5、我们说this要么是window,要么是调用函数的对象,那么this能否被改变呢?答案是可以的,call/apply,就可以改变this的指向,两者的相同点是第一个参数是被指向的对象,后面参数是函数执行所需要的参数,不同的地方是,call第一个参数之后的其他参数,依此往后排,逗号隔开,而apply后面的参数放在一个数组里,放在第二参数的位置,具体用法如下:
var obj = {
    f:function(){
        console.log(this);
    }
};
var obj2 = obj.f;
obj.f();//输出obj
var objnew = {};
obj2.call(objnew, 参数1, 参数2, ....);//输出objnew
obj2.apply(objnew, [参数1, 参数2...]);//输出objnew
上面是对this的总结,应该可以在大部分情况下判断this指向的是谁了
this的用法-(2019-3)的更多相关文章
- Django 资源 与 知识 Django中自建脚本并使用Django环境 model中的save()方法说明 filter()用法
		
Django 资源 与 知识 Django中自建脚本并使用Django环境 model中的save()方法说明 filter()用法 2018/11/06 Chenxin 资料说明 Django基础入 ...
 - java 文件硬盘存取 练习
		
读写文件操作 对字符流文件读写 1 写文件 FileOutputStream 节点类 负责写字节 OutputStreamWriter 转化类 负责字节到字符转换 BufferedWriter 装饰 ...
 - 2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法
		
一.SQL中的语法 1.drop table 表名称 eg: drop table dbo.Sys_Test 2.truncate table 表 ...
 - 怎奈风云多变换,骚完一波还一波,记PHP mongodb驱动的2019年11月用法
		
怎么,觉得pecl下一个扩展包,phpize make make install php.ini里引用一下 mongodb.so就万事大吉了? Deeply Sorry!看到MongoDB\Driv ...
 - pycharm的安装及用法
		
俗话说的好:"工欲善其事,必先利其器",程序员写代码,肯定不能在编译器里面写,这有一个全宇宙最好的python编译器,叫做pycharm ,他的优点呢,大家可以看一下: 优点:1, ...
 - pytest-allure-poco之allure全量详细用法
		
allure简介 Allure Framework是一个灵活的轻量级多语言测试报告工具.貌似是目前最漂亮的一个报告工具 python版本及必要库或工具 python 3.7 pytest 4.3.1 ...
 - 西安活动 | 2019年1月13号 "拥抱开源, 又见.NET" 线下交流活动报名进行中
		
随着.NET Core的发布和开源,.NET又重新回到人们的视野..NET Core的下个3.0即将release,加入非常多的新功能,越来越拥抱变化,DevOps和Microservice的最佳实践 ...
 - asyncio  基础用法
		
asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...
 - 2019余姚培训游记+ZJOJD2划水记
		
2019余姚培训游记 突然就想写一个... 注意:以下全是胡言乱语的自high,还有很多错别字 Day 0 来的比较早,早上就到了 上午把一本小说看完了,是一个年轻作者的处女作. 我觉得我第一本书一定 ...
 - 末学者笔记--SSHD服务及SCP用法
		
sshd服务讲解 1.SSHD服务 介绍:SSH 协议:安全外壳协议.为 Secure Shell 的缩写.SSH 为建立在应用层和传输层基础上的安全协议. 默认端口22 作用: sshd服务使用SS ...
 
随机推荐
- Appium 自动化测试配置wda的两种方式。
			
tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appium与iPhone(基于xcuitest)设备进行通信而添加的.但是,这个模块在是一个独立的项目,在使 ...
 - vuex防止数据刷新数据刷掉
			
replaceState replaceState(state: Object) 替换store的根状态,仅用状态合并或者时光旅行调试 // 在页面加载时读取localStorage里的状态信息 if ...
 - 【初识Spring】对象(Bean)实例化及属性注入(xml方式)
			
title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...
 - SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错
			
SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...
 - selenium鼠标操作 包含右击和浮层菜单的选择
			
感谢http://www.cnblogs.com/tobecrazy/p/3969390.html 博友的分享 最近在学习selenium的一些鼠标的相关操作 自己在百度的相关操作代码 /** * ...
 - Java内存模型。
			
Java内存模型: 准备知识:缓存,缓存一致性,硬件缓冲区:写缓冲区.无效化队列,内存重排序,内存屏障. 1.Java内存模型概念. 首先,在并发的情况下,计算机系统必须解决这样两个问题:第一,一个处 ...
 - 在linux下配置jupyter notebook,本地浏览器访问
			
1.安装jupyter notebook pip install jupyter 2.生成配置文件 jupyter notebook --generate-config 3.设置登陆密码并生成秘钥 s ...
 - lf 前后端分离 (5)  优惠券
			
关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...
 - 201871010108-高文利《面向对象程序设计(java)》第十三周学习总结
			
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...
 - Pycharm中使用from appium import webdriver时报错:ModuleNotFoundError: No module named 'appium'
			
此时先检查一下有没有安装Appium-Python-Client,如果没有安装Appium-Python-Client就在控制台输入pip install Appium-Python-Client进行 ...