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中关于执行环境的杂谈
Aug 14 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
jquery 多行文本框(textarea)高度变化
Jul 03 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
Jan 15 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
再探JavaScript作用域
Sep 24 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
JavaScript+html5 canvas实现本地截图教程
Apr 16 Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 Javascript
Bootstrap CSS组件之导航(nav)
Dec 17 Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
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 file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
PHP闭包实例解析
2014/09/08 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
iframe实用操作锦集
2014/04/22 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
python sorted函数原理解析及练习
2020/02/10 Python
虚拟机下载python是否需要联网
2020/07/27 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
介绍一下#error预处理
2015/09/25 面试题
酒吧副总经理岗位职责
2013/12/10 职场文书
2014新年寄语
2014/01/20 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript