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 面向对象技术基础教程
Mar 03 Javascript
JS date对象的减法处理实现代码
Dec 28 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 Javascript
微信小程序学习之数据处理详解
Jul 05 Javascript
jQuery实现上传图片前预览效果功能
Aug 03 jQuery
基于Bootstrap表单验证功能
Nov 17 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
webpack 动态批量加载文件的实现方法
Mar 19 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 12 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数组实例总结与说明
2011/08/23 PHP
php之可变函数的实例详解
2017/09/13 PHP
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
微信小程序 http请求的session管理
2017/06/07 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
pandas实现选取特定索引的行
2018/04/20 Python
python浪漫表白源码
2019/04/05 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
python画图常规设置方式
2020/03/05 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
Python datetime模块使用方法小结
2020/06/18 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
项目经理岗位职责
2013/11/11 职场文书
教师党性分析材料
2014/02/04 职场文书
同事吵架检讨书
2014/02/05 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js