JavaScript中this函数使用实例解析


Posted in Javascript onFebruary 21, 2020

这篇文章主要介绍了JavaScript中this函数使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

普通函数

普通函数中的this,普通函数中的this表示调用此函数时的对象,如下例:

var x=11;
var obj={
 x:22,
 say:function(){
 console.log(this.x)
 }
}
obj.say();
//console.log输出的是22
//调用say函数的是对象obj,所以this指代对象obj,输出的就是obj对象里的x值,即22。

箭头函数

箭头函数中的this,资料上说的箭头函数内部是没有this的,也就是说,箭头函数里面的this会继承自外部的this,下面有个例子,用来详细说明下:

var x=11;
var obj={
 x:22,
 y:this,//window
 say:()=>{
 console.log(this.x);
 }
}
obj.say();
//输出的值为11
console.log(obj.y);
//输出的值为window对象
//obj对象中的this指代的就是window,也就是全局环境,因为箭头函数中的this就会就近找到上一个对象中this所指代的对象,从以上例子可以看出来,obj内部属性y就为obj内部this指代的对象,输出是window。

由于箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值,

1、所以 call() / apply() / bind() 方法对于箭头函数来说只是传入参数,对它的 this 毫无影响。

2、考虑到 this 是词法层面上的,严格模式中与 this 相关的规则都将被忽略。(可以忽略是否在严格模式下的影响)

因为箭头函数可以捕获其所在上下文的this值 所以

function Person() { 
 this.age = 0; 
 setInterval(() => {
 // 回调里面的 `this` 变量就指向了期望的那个对象了
 this.age++;
 }, 3000);
}

var p = new Person();

两个例子加深印象

普通函数

var a=11
function test1(){
 this.a=22;
 let b=function(){
 console.log(this.a);
 };
 b();
}
var x=new test1();
//输出11

为什么会输出11?因为普通函数中的this指向的是调用它的对象,如果没有直接调用对象,会指向undefined或者window,一般都会指向window,在严格模式下才会指向undefined。上述的例子中,并没有明确的调用对象,而普通函数中的this并不会向上继续找对象,所以直接返回window。

箭头函数

var a=11;
function test2(){
 this.a=22;
 let b=()=>{console.log(this.a)}
 b();
}
var x=new test2();
//输出22

箭头函数中会往上寻找this,直到找到所代表的this为止。例子中,构造函数被实例化成为一个对象x,那x中的this指代的就是对象x本身,所以箭头函数this就代表x对象,x对象内部的a值为22,所以输出22。

总结

1、箭头函数中的this是在声明中就定义好了的,而普通函数中的this则是在调用时定义好的。

2、箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值。正是因为它没有this,所以也就不能用作构造函数。,

3、若想改变this指向可以用bind方法。bind方法在ES5引入, 在Function的原型链上, Function.prototype.bind。通过bind方法绑定后, 函数将被永远绑定在其第一个参数对象上, 而无论其在什么情况下被调用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 面向对象编程基础:继承
Aug 21 Javascript
使用JQuery进行跨域请求
Jan 25 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
Jan 09 Javascript
浅谈Jquery为元素绑定事件
Apr 27 Javascript
js遮罩效果制作弹出注册界面效果
Jan 25 Javascript
使用Node.js实现RESTful API的示例
Aug 01 Javascript
Vue中this.$router.push参数获取方法
Feb 27 Javascript
vue-router懒加载速度缓慢问题及解决方法
Nov 25 Javascript
vue ssr 实现方式(学习笔记)
Jan 18 Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 Javascript
基于vuex实现购物车功能
Jan 10 Vue.js
使用JS实现简易计算器
Jun 14 Javascript
如何通过JS实现转码与解码
Feb 21 #Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
Feb 21 #Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 #Javascript
JS实现判断移动端PC端功能
Feb 21 #Javascript
JS获取表格视图所选行号的ids过程解析
Feb 21 #Javascript
微信小程序vant弹窗组件的实现方式
Feb 21 #Javascript
纯js实现无缝滚动功能代码实例
Feb 21 #Javascript
You might like
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中元组,列表,字典的区别
2017/05/21 Python
Python 实现自动导入缺失的库
2019/10/29 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
Python post请求实现代码实例
2020/02/28 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
品恩科技软件测试面试题
2014/10/26 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
秋天的图画教学反思
2014/05/01 职场文书
医德考评自我评价
2014/09/14 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电