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 相关文章推荐
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
自己整理的一个javascript日期处理函数
Oct 16 Javascript
jquery中EasyUI实现异步树
Mar 01 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
JS实现简单的浮动碰撞效果示例
Dec 28 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
使用async await 封装 axios的方法
Jul 09 Javascript
vue-week-picker实现支持按周切换的日历
Jun 26 Javascript
vue绑定数字类型 value为数字的实例
Aug 31 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 删除cookie和浏览器重定向
2009/03/16 PHP
php 函数中使用static的说明
2012/06/01 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
js获取内联样式的方法
2015/01/27 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
python3.3实现乘法表示例
2014/02/07 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
简单实现python聊天程序
2018/04/01 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python3读写ini配置文件的示例
2020/11/06 Python
使用django自带的user做外键的方法
2020/11/30 Python
ASP.NET Core中的配置详解
2021/02/05 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
送给他或她的礼物:FUN.com
2018/08/17 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
文明家庭先进事迹材
2014/01/27 职场文书
大学生赌博检讨书
2014/09/22 职场文书
党员检讨书
2014/10/13 职场文书