热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[ES6]this指向window事件源箭头函数的this指向改变this指向callapplybind

this指向window声明式函数functionfun1(){console.log(this);}fun1();匿名函数constfun2function(){console

this指向 window


声明式函数

function fun1(){console.log(this);}fun1();

匿名函数

const fun2 = function (){console.log(this);}fun2();

定时器 延时器

setInterval(function(){console.log(this);} , 1000);setTimeout(function(){console.log(this);} , 1000);

forEach循环

const arr = [1,2,3,4,5];arr.forEach(function(item){console.log(this);})

在这里插入图片描述


this指向 事件源

事件绑定中 事件处理函数 this指向默认是事件源也就是绑定事件的标签对象

<div>我是div标签对象div>

const oDiv &#61; document.querySelector(&#39;div&#39;);oDiv.addEventListener(&#39;click&#39; , function(){console.log(this);})

在这里插入图片描述


this指向 数组/对象

数组/对象中 存储的函数 this指向是 数组/对象

// 数组中存储的函数 this指向 是 这个 数组本身const arr1 &#61; [1,2,3, function(){console.log(this)} ];arr1[3]();

在这里插入图片描述

// 对象中存储的函数 this指向 是 这个 对象本身// 可以通过 this.属性 调用对象存储的数据const obj &#61; {name:&#39;张三&#39;,age:18,sex:&#39;男&#39;,fun:function(){console.log(this);console.log(this.name);console.log(this.age);console.log(this.sex);},};obj.fun() ;

箭头函数的this指向

箭头函数的this指向是 父级程序的this指向如果没有父级程序 或者 父级程序没有this &#xff0c;箭头函数的this指向是 window

// // 箭头函数绑定的事件处理函数// // 当前这个的程序中 事件处理函数 没有父级程序// // 箭头函数this指向是windowoDiv.addEventListener(&#39;click&#39; , ()&#61;>{console.log(this);})

const obj &#61; {name:&#39;张三&#39;,age:18,sex:&#39;男&#39;,// 对象中定义的函数 this指向是这个对象本身fun1:function(){console.log(this)},// 箭头函数,this指向是父级程序 // 当前箭头函数,父级程序是对象// 对象是没有this的,箭头函数this指向是windowfun2:()&#61;>{console.log(this)},fun3:function(){// 定义在对象中的函数fun3,this指向是对象本身// 函数fun4是一个箭头函数,存储在 函数fun3 中 父级程序就是函数fun3// 函数fun3的this指向是存储fun3的对象obj// 箭头函数fun4 的this指向 和 父级程序fun3的this指向相同// 也就是 obj对象本身const fun4 &#61; ()&#61;>{console.log(this);}fun4();} };obj.fun1();obj.fun2();obj.fun3();

在这里插入图片描述


改变this指向


call

函数调用.call( 参数1 , 参数2,参数3.... );参数1: 要改变的this指向之后的所有参数参数2,参数3....原始函数需要的数据

const obj1 &#61; {name:&#39;张三&#39;,age:18,sex:&#39;男&#39;,// 存储在对象obj1 中的函数 this指向默认是 对象obj1// this.name , this.age , this.sex 调用的应该是 obj1 中的数据fun:function(addr,phone){console.log( this.name );console.log( this.age );console.log( this.sex );console.log( addr );console.log( phone );}}obj1.fun(&#39;北京&#39; , 12341);

在这里插入图片描述

const obj2 &#61; {name:&#39;李四&#39;,age:20,sex:&#39;女&#39;,};obj1.fun.call(obj2 , &#39;天津&#39; , 12345);

在这里插入图片描述


apply

函数调用.apply( 参数1 , [ 参数2,参数3.... ] );参数1: 要改变的this指向之后的所有参数参数2,参数3....以数组的形式 赋值 原始函数需要的数据

const obj2 &#61; {name:&#39;李四&#39;,age:20,sex:&#39;女&#39;,};obj1.fun.apply(obj2 , [ &#39;天津&#39; , 12345 ]);

在这里插入图片描述


bind

const obj1 &#61; {name:&#39;张三&#39;,age:18,sex:&#39;男&#39;,// 存储在对象obj1 中的函数 this指向默认是 对象obj1// this.name , this.age , this.sex 调用的应该是 obj1 中的数据fun:function(addr,phone){console.log( this.name );console.log( this.age );console.log( this.sex );console.log( addr );console.log( phone );}}const obj2 &#61; {name:&#39;李四&#39;,age:20,sex:&#39;女&#39;,};obj1.fun.bind(obj2 , &#39;天津&#39; , 12345)();

在这里插入图片描述


不同点&#xff1a;


  1. 函数调用 call&#xff0c;apply方法时&#xff0c;返回的是调用函数的返回值。
  2. bind是返回一个新的函数&#xff0c;需要再加一个小括号来调用。
  3. call和apply的区别就是&#xff0c;call接受的是一系列参数&#xff0c;而apply接受的是一个数组。

<div>我是div标签div><p>我是p标签p><h1>我是h1标签h1>

const oDiv &#61; document.querySelector(&#39;div&#39;);
oDiv.addEventListener(&#39;click&#39; , fun );function fun(){this.style.color &#61; &#39;red&#39;;this.style.width &#61; &#39;200px&#39;;this.style.height &#61; &#39;200px&#39;;this.style.background &#61; &#39;pink&#39;;}

在这里插入图片描述

const oP &#61; document.querySelector(&#39;p&#39;);const oH1 &#61; document.querySelector(&#39;h1&#39;);oDiv.addEventListener(&#39;click&#39; , fun.bind( oP , &#39;张三&#39; , 18 , &#39;男&#39; ) );oDiv.addEventListener(&#39;click&#39; , fun.bind( oH1 , &#39;张三&#39; , 18 , &#39;男&#39; ) );function fun( name,age,sex ){this.style.color &#61; &#39;red&#39;;this.style.width &#61; &#39;200px&#39;;this.style.height &#61; &#39;200px&#39;;this.style.background &#61; &#39;pink&#39;;console.log( name , age , sex );}

在这里插入图片描述


推荐阅读
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 一、什么是闭包?有什么作用什么是闭包闭包是定义在一个函数内部的函数,它可以访问父级函数的内部变量。当一个闭包被创建时,会关联一个作用域—— ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
author-avatar
cdV陈海泰C
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有