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 相关文章推荐
jquery简单瀑布流实现原理及ie8下测试代码
Jan 23 Javascript
JS操作JSON要领详细总结
Aug 25 Javascript
Javascript call和apply区别及使用方法
Nov 14 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
angularJS 入门基础
Feb 09 Javascript
JQuery实现超链接鼠标提示效果的方法
Jun 10 Javascript
jQuery中 delegate使用的问题
Jul 03 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
Jan 23 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
May 07 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数组应用之比较两个时间的相减排序
2008/08/18 PHP
php记录日志的实现代码
2011/08/08 PHP
dedecms中使用php语句指南
2014/11/13 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
session 加入redis的实现代码
2016/07/15 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
Vue渲染函数详解
2017/09/15 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Python实现抢购IPhone手机
2018/02/07 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
精彩的英文自荐信
2014/01/30 职场文书
品牌推广策划方案
2014/05/28 职场文书
求职教师自荐书
2014/06/19 职场文书
2014年政工师工作总结
2014/12/18 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
早会开场白台词大全
2015/06/01 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
详解Oracle块修改跟踪功能
2021/11/07 Oracle