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读取ASP设定的COOKIE
Feb 15 Javascript
几个有趣的Javascript Hack
Jul 24 Javascript
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
node.js中的fs.unlink方法使用说明
Dec 15 Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 Javascript
详解node.js平台下Express的session与cookie模块包的配置
Apr 26 Javascript
javascript实现二叉树遍历的代码
Jun 08 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
Oct 16 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 Javascript
JavaScript代码模拟鼠标自动点击事件示例
Aug 07 Javascript
vue使用vant中的checkbox实现全选功能
Nov 17 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
珊瑚虫IP库浅析
2007/02/15 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
php头像上传预览实例代码
2017/05/02 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
python中的json总结
2018/10/11 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python:slice与indices的用法
2019/11/25 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
十一酒店活动方案
2014/02/20 职场文书
单位活动策划方案
2014/08/17 职场文书
敬老月活动总结
2014/08/28 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
人生感悟经典句子
2019/08/20 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
Python实现天气查询软件
2021/06/07 Python