JavaScript严格模式下关于this的几种指向详解


Posted in Javascript onJuly 12, 2017

前言

相信不少人在学习或者使用Javascript的时候,都曾经被 JavaScript 中的 this 弄晕了,那么本文就来整理总结一下在严格模式下 this 的几种指向。

一、全局作用域中的this

在严格模式下,在全局作用域中,this指向window对象

"use strict";
 
 console.log("严格模式");
 console.log("在全局作用域中的this");
 console.log("this.document === document",this.document === document);
 console.log("this === window",this === window);
 this.a = 9804;
 console.log('this.a === window.a===',window.a);

JavaScript严格模式下关于this的几种指向详解

二、全局作用域中函数中的this

在严格模式下,这种函数中的this等于undefined

"use strict";
 
 console.log("严格模式");
 console.log('在全局作用域中函数中的this');
 function f1(){
 console.log(this);
 }
 
 function f2(){
 function f3(){
 console.log(this);
 }
 f3();
 }
 f1();
 f2();

JavaScript严格模式下关于this的几种指向详解

三、 对象的函数(方法)中的this

在严格模式下,对象的函数中的this指向调用函数的对象实例

"use strict";
 
 console.log("严格模式");
 console.log("在对象的函数中的this");
 var o = new Object();
 o.a = 'o.a';
 o.f5 = function(){
 return this.a;
 }
 console.log(o.f5());

JavaScript严格模式下关于this的几种指向详解

四、构造函数的this

在严格模式下,构造函数中的this指向构造函数创建的对象实例。

"use strict";
 
 console.log("严格模式");
 console.log("构造函数中的this");
 function constru(){
 this.a = 'constru.a';
 this.f2 = function(){
 console.log(this.b);
 return this.a;
 }
 }
 var o2 = new constru();
 o2.b = 'o2.b';
 console.log(o2.f2());

JavaScript严格模式下关于this的几种指向详解

五、事件处理函数中的this

在严格模式下,在事件处理函数中,this指向触发事件的目标对象。

"use strict";
 
 function blue_it(e){
 if(this === e.target){
 this.style.backgroundColor = "#00f";
 }
 }
 var elements = document.getElementsByTagName('*');
 for(var i=0 ; i<elements.length ; i++){
 elements[i].onclick = blue_it;
 }
 
 //这段代码的作用是使被单击的元素背景色变为蓝色

六、内联事件处理函数中的this

在严格模式下,在内联事件处理函数中,有以下两种情况:

<button onclick="alert((function(){'use strict'; return this})());">
 内联事件处理1
 </button>
 <!-- 警告窗口中的字符为undefined -->
 
 <button onclick="'use strict'; alert(this.tagName.toLowerCase());">
 内联事件处理2
 </button>
 <!-- 警告窗口中的字符为button -->

后语

参考资料

MDN https://developer.mozilla.org...

延伸资料

JavaScript 严格模式详解 https://3water.com/article/74890.htm

菜鸟学堂 > JavaScript 严格模式 http://edu.3water.com/js/js-strict.html

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
拥抱模块化的JavaScript
Mar 07 Javascript
jquery ready函数、css函数及text()使用示例
Sep 27 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
window.onload绑定多个事件的两种解决方案
May 15 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
AngularJS 霸道的过滤器小结
Apr 26 Javascript
如何在AngularJs中调用第三方插件库
May 21 Javascript
Bootstrap 3多级下拉菜单实例
Nov 23 Javascript
js实现带搜索功能的下拉框
Jan 11 Javascript
Vertx基于EventBus发送接受自定义对象
Nov 16 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
Jul 12 #jQuery
详解如何用webpack打包一个网站应用项目
Jul 12 #Javascript
利用node.js实现自动生成前端项目组件的方法详解
Jul 12 #Javascript
AngularJS实现select的ng-options功能示例
Jul 12 #Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
Jul 12 #Javascript
实例详解JavaScript中setTimeout函数的执行顺序
Jul 12 #Javascript
详解Node项目部署到云服务器上
Jul 12 #Javascript
You might like
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
PHP Reflection API详解
2015/05/12 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
python django事务transaction源码分析详解
2017/03/17 Python
利用Python破解斗地主残局详解
2017/06/30 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
Python urllib2运行过程原理解析
2020/06/04 Python
python自动生成证件号的方法示例
2021/01/14 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
自动一体化专业求职信
2014/03/15 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
2015年征兵工作总结
2015/07/23 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书