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 04 Javascript
jQuery 源码分析笔记(5) jQuery.support
Jun 19 Javascript
修复ie8&chrome下window的resize事件多次执行
Oct 20 Javascript
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
解决json日期格式问题的3种方法
Feb 02 Javascript
jquery append()方法与html()方法的区别及使用介绍
Aug 01 Javascript
jquery幻灯片插件bxslider样式改进实例
Oct 15 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
Jan 06 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
Aug 09 jQuery
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
Feb 01 Javascript
JavaScript cookie原理及使用实例
May 08 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之字符串变相相减的代码
2007/03/19 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
Python多线程实例教程
2014/09/06 Python
Python的多态性实例分析
2015/07/07 Python
pandas string转dataframe的方法
2018/04/11 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
用python爬取租房网站信息的代码
2018/12/14 Python
python实现贪吃蛇游戏
2020/03/21 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
判断单链表中是否存在环
2012/07/16 面试题
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
小孩百日宴答谢词
2014/01/15 职场文书
材料会计岗位职责
2014/03/06 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
高一军训口号
2015/12/25 职场文书
小学三年级语文教学反思
2016/03/03 职场文书
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB