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 相关文章推荐
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 Javascript
JS修改css样式style浅谈
May 06 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
简单理解vue中实例属性vm.$els
Dec 01 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
Jul 28 Javascript
weui框架实现上传、预览和删除图片功能代码
Aug 24 Javascript
JavaScript实现获取select下拉框中第一个值的方法
Feb 06 Javascript
AngularJS 前台分页实现的示例代码
Jun 07 Javascript
Vue自定义属性实例分析
Feb 23 Javascript
vue+express+jwt持久化登录的方法
Jun 14 Javascript
js实现碰撞检测
Jan 29 Javascript
详解Vue3使用axios的配置教程
Apr 29 Vue.js
如何通过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
安装APACHE
2007/01/15 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python----数据预处理代码实例
2019/03/20 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
什么是Python中的顺序表
2020/06/02 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书