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 相关文章推荐
js 弹出框 替代浏览器的弹出框
Oct 29 Javascript
javascript实现数字+字母验证码的简单实例
Feb 10 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
May 14 Javascript
微信支付如何实现内置浏览器的H5页面支付
Sep 25 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
跟我学习javascript的全局变量
Nov 16 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
vxe-table vue table 表格组件功能
May 26 Javascript
微信小程序获取地理位置及经纬度授权代码实例
Sep 18 Javascript
Vue实现简单的跑马灯
May 25 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 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
PHP学习笔记之一
2011/01/17 PHP
PHP判断图片格式的七种方法小结
2013/06/03 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
小学生自我鉴定
2013/10/12 职场文书
电气专业推荐信范文
2013/11/18 职场文书
仓库主管岗位职责
2014/03/02 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
音乐之声观后感
2015/06/04 职场文书
导游词之昭君岛
2020/01/17 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
python基础入门之普通操作与函数(三)
2021/06/13 Python
Oracle表空间与权限的深入讲解
2021/11/17 Oracle