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 相关文章推荐
ie和firefox不兼容的解决方法集合
Apr 28 Javascript
javascript 写类方式之二
Jul 05 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
javascript正则表达式之分组概念与用法实例
Jun 16 Javascript
详细谈谈AngularJS的子级作用域问题
Sep 05 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
Feb 14 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 Javascript
详解基于node的前端项目编译时内存溢出问题
Aug 01 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
nginx配置React静态页面的方法教程
Nov 03 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中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
php设计模式之委托模式
2016/02/13 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
利用javascript查看html源文件
2006/11/08 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
pip安装python库的方法总结
2019/08/02 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
员工培训心得体会
2013/12/30 职场文书
会计学生自我鉴定
2014/02/06 职场文书
厂区绿化方案
2014/05/08 职场文书
影视广告专业求职信
2014/09/02 职场文书
医院合作意向书范本
2015/05/08 职场文书