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题目,重写函数让其无限相加
Feb 15 Javascript
javascript五图轮播切换实用版
Aug 17 Javascript
js实现人才网站职位选择功能的方法
Aug 14 Javascript
Bootstrap表单布局
Jul 19 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
javascript 封装Date日期类实例详解
May 28 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
Vue项目中如何引入icon图标
Mar 28 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
总结javascript三元运算符知识点
Sep 28 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
Apr 26 Javascript
Vue实现tab导航栏并支持左右滑动功能
Jun 28 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中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
js几个验证函数代码
2010/03/25 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
js判断是否是手机页面
2017/03/17 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
重阳节登山活动方案
2014/02/03 职场文书
外贸专业求职信
2014/03/09 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
大班开学家长寄语
2014/04/04 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书