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 相关文章推荐
jquery tab插件精简版分享
Sep 10 Javascript
仿猪八戒网左下角的文字滚动效果
Oct 28 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
May 11 Javascript
js实现的捐赠管理完整实例
Jan 20 Javascript
跟我学习javascript的prototype原型和原型链
Nov 18 Javascript
React快速入门教程
Jan 17 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
Feb 09 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
May 16 Javascript
Electron中实现大文件上传和断点续传功能
Oct 28 Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 Javascript
浅析JavaScript 函数防抖和节流
Jul 13 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 Hash算法:Times33算法代码实例
2015/05/13 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
python实现电脑自动关机
2018/06/20 Python
python实现XML解析的方法解析
2019/11/16 Python
python3 实现调用串口功能
2019/12/26 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
python爬虫工具例举说明
2020/11/30 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
优秀演讲稿范文
2013/12/29 职场文书
境外导游求职信
2014/02/27 职场文书
给校长的建议书600字
2014/05/15 职场文书
法制教育演讲稿
2014/09/10 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python