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 相关文章推荐
js同时按下两个方向键
Dec 01 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
jQuery之浮动窗口实现代码(两种方法)
Sep 08 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
jquery实现在光标位置插入内容的方法
Feb 05 Javascript
JS烟花背景效果实现方法
Mar 03 Javascript
举例简介AngularJS的内部语言环境
Jun 17 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
Aug 26 jQuery
关于RxJS Subject的学习笔记
Dec 05 Javascript
vue el-table实现自定义表头
Dec 11 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
聊天室php&amp;mysql(一)
2006/10/09 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
基于jquery的表格排序
2010/09/11 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jquery自定义表格样式
2015/11/23 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
python实现超市扫码仪计费
2018/05/30 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Django单元测试工具test client使用详解
2019/08/02 Python
python ubplot使用方法解析
2020/01/10 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
Python 解析xml文件的示例
2020/09/29 Python
平安校园建设方案
2014/05/02 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
2015大学生实训报告
2014/11/05 职场文书