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获取DOM元素位置和尺寸大小的方法
Apr 12 Javascript
JavaScript编程中的Promise使用大全
Jul 28 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
js中的DOM模拟购物车功能
Mar 22 Javascript
基于jQuery封装的分页组件
Jun 26 jQuery
vue checkbox 全选 数据的绑定及获取和计算方法
Feb 09 Javascript
AngularJS自定义表单验证功能实例详解
Aug 24 Javascript
JS实现Cookie读、写、删除操作工具类示例
Aug 28 Javascript
微信小程序实现的canvas合成图片功能示例
May 03 Javascript
Vue项目中ESlint规范示例代码
Jul 04 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 14 Javascript
vue.js实现双击放大预览功能
Jun 23 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
投票管理程序
2006/10/09 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
浅析Python中的多重继承
2015/04/28 Python
不要用强制方法杀掉python线程
2017/02/26 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
医学检验专业个人求职信范文
2013/12/04 职场文书
接受捐赠答谢词
2014/01/27 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
二手房购房意向书范本
2014/04/01 职场文书
解除劳动合同协议书
2014/09/17 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
自书遗嘱范文
2015/08/07 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers