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实现动态侧边栏代码
Feb 19 Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 Javascript
AngularJS ng-mousedown 指令
Aug 02 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
bootstrap paginator分页前后台用法示例
Jun 17 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
Sep 03 jQuery
Django中使用jquery的ajax进行数据交互的实例代码
Oct 15 jQuery
再谈Angular4 脏值检测(性能优化)
Apr 23 Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 Javascript
VUE注册全局组件和局部组件过程解析
Oct 10 Javascript
JavaScript实现简单计算器功能
Dec 19 Javascript
JavaScript实现滑块验证解锁
Jan 07 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生成RSS订阅的方法
2015/02/13 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
JavaScript中的闭包
2016/02/24 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
Python采用raw_input读取输入值的方法
2014/08/18 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Python中字符串的处理技巧分享
2016/09/17 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
python对文件的操作方法汇总
2020/02/28 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
高中运动会广播稿
2014/01/21 职场文书
工程质量承诺书范文
2014/03/27 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
2014年招商工作总结
2014/11/22 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
中秋联欢会主持词
2015/07/04 职场文书
新学期家长寄语2016
2015/12/03 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS