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 ajaxsubmit上传图片实现代码
Nov 04 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
Mar 07 Javascript
表单元素的submit()方法和onsubmit事件应用概述
Feb 01 Javascript
JavaScript 判断浏览器是否支持SVG的代码
Mar 21 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
Nov 19 Javascript
Bootstrap 实现查询的完美方法
Oct 26 Javascript
jquery版轮播图效果和extend扩展
Jul 18 jQuery
JS库之ParticlesJS使用简介
Sep 12 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
如何使用 vue + d3 画一棵树
Dec 03 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
May 07 Javascript
vue路由教程之静态路由
Sep 03 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代码运行时间查看类代码分享
2011/08/06 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
Javascript的闭包
2009/12/31 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
pygame学习笔记(4):声音控制
2015/04/15 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
numpy.where() 用法详解
2019/05/27 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
竞争上岗实施方案
2014/03/21 职场文书
求职信内容怎么写
2014/05/26 职场文书
生日宴会策划方案
2014/06/03 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
合作协议书范本
2014/10/25 职场文书
2014年宣传工作总结
2014/11/18 职场文书
2014年财政所工作总结
2014/11/22 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
详解Flask开发技巧之异常处理
2021/06/15 Python