JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。接下来小编要为大家介绍的就是关于js中修改this的指向方法整理,希望能够给大家带来帮助。

  js中修改this的指向方法整理:

  方法一:call

  使用方法:fun.call(thisArg[,arg1[, arg2[, ...]]])

  该方法传递一个thisArgs和一个参数列表,thisArgs制定了函数在运行中的调用者,也就是函数中的this对象,而参数列表会被传入调用函数中。

  call 方法可以在一个对象上借用另一个对象的方法

  案例:Object.prototype.tostring.call([])。一个Array对象借用了Object对象上的方法

  thisArgs的取值情况:

  (1)不传,或者传null,undefined,函数中的this指向window对象。

  (2)传递另一个函数的函数名,函数中的this指向这个函数的引用

  (3)传递字符串,数值或者不二类型的那个基础数据类型,函数中的this指向其对应的包装对象,如string,number,boolean

  (4)传递一个对象,函数中的this指向这个对象。

  这是call的核心功能,它允许你在一个对象上调用该对象没有定义的方法,并且这个方法可以访问该对象中的属性。

  还可以通过call方法来调用匿名函数

  在下例中的for循环体内,我们创建了一个匿名函数,然后通过调用该函数的call方法,将每个数组元素作为指定的this值执行了那个匿名函数。这个匿名函数的主要目的是给每个数组元素对象添加一个print方法,这个print方法可以打印出各元素在数组中的正确索引号。当然,这里不是必须得让数组元素作为this值传入那个匿名函数(普通参数就可以),目的是为了演示call的用法。

  方法二:apply()方法

  fun.apply(thisArg, [argsArray])

  apply和call的唯一区别是第二个参数的传递方式不同,apply的第二个参数必须是一个数组,而call允许传递一个参数列表。值得你注意的是,虽然apply接收的是一个参数数组,但在传递给调用函数时,却是以参数列表的形式传递。

  注意:这里的argsArray可以是一个数组或者类数组对象,如果该参数的值为null 或 undefined,则表示不需要传入任何参数。

  apply方法的实用写法

  当参数是明确知道数量时用call;不确定的时候用apply,然后把参数push进数组传递进去,也可以通过arguments这个数组来遍历所有的参数。

  方法三:bind()方法

  fun.bind(thisArg, [arg1, [arg2, [...]]])

  bind是ES5新增的一个方法,它的传参和call类似,但又和call/apply有着显著的不同,即调用call或apply都会自动执行对应的函数,而bind不会执行对应的函数,只是返回了对函数的引用。

  ES5中新增加的bind方法可以弥补call()和apply()方法的不足,由于call/apply会对目标函数自动执行,从而导致它无法在事件绑定函数中使用,因为事件绑定函数不需要我们手动执行,它是在事件被触发时由JS内部自动执行的。而bind在实现改变函数this的同时又不会自动执行目标函数,因此可以完美的解决上述问题,我们来看看一个例子:

js中修改this的指向方法整理相关推荐

  1. js中给数组添加元素的方法有哪些

    js中给数组添加元素的方法有哪些 unshift:将参数添加到原数组开头,并返回数组的长度 pop:删除原数组最后一项,并返回删除元素的值:如果数组为空则返回undefined push:将参数添加到 ...

  2. js中取得变量绝对值的方法

    本文实例讲述了js中取得变量绝对值的方法.分享给大家供大家参考.具体分析如下: 绝对值在js中我们直接使用abs函数来求,这里就来整理一些关于js中取得变量的绝对值的方法,以便让大家更深入的理解js绝 ...

  3. JavaScript -- 时光流逝(三):js中的 String 对象的方法

    JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...

  4. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS 1.方法定义 call方法:  语法:call([thisObj ...

  5. js中改变原数组的方法以及解决改变原数组的方法

    js中改变原数组的方法以及解决改变原数组的方法 参考文章: (1)js中改变原数组的方法以及解决改变原数组的方法 (2)https://www.cnblogs.com/Ingots/p/1151701 ...

  6. js中ES6新增的数组方法reduce(),和数组去重,降维。

    js中ES6新增的数组方法reduce() js数组reduce()详解 基本概念: reduce()方法接收一个函数作为累加器,数组中的每一值(从左到右)开始缩减,最后成为一个值 reduce()为 ...

  7. php js unescape,PHP实现JS中escape与unescape的方法

    本文实例讲述了PHP实现JS中escape与unescape的方法.分享给大家供大家参考,具体如下: JavaScript中的escape和unescape是吧字符串转换为unicode十六进制编码, ...

  8. JS中修改元素内容,属性,样式的方法【详解】

    改变元素内容的方法: .innerHTML=内容(可识别标签)                            .innerText=内容(只识别文本) 如果把属性作为集合,那么样式就是这个集合 ...

  9. js 中的五种继承方法

    正式发布的ES6中已经封装实现了其他OO语言中的继承形式,Class Extends,这里主要记录js的原型继承和借用构造函数继承 一.原型链继承 function Super(){this.name ...

最新文章

  1. JavaScript学习笔记(十五)
  2. PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))
  3. 如何实时主动监控你的网站接口是否挂掉并及时报警
  4. 10以内的分解与组成怎么教_狗狗酷炫的飞盘游戏怎么玩?分解步骤教你快速学会...
  5. Sublime Text3(mac)一些插件和快捷键
  6. latex公式在括号中编辑(多行公式)
  7. 可替换元素和非替换元素
  8. matplotlib绘制平滑曲线
  9. java 的clean code 技巧
  10. fisco bcos Caliper部署 错误总结
  11. bin转txt工具_Shell笔记之常用工具
  12. android 9坚果r1,坚果R1、小米MIX2S、一加6对比评测 骁龙845旗舰怎么选?
  13. HTML居中对齐样例
  14. java 四分位算法_四分位数怎么算
  15. 界面自动化测试工具-Ksend
  16. Krpano全景图制作教程
  17. 查表程序c8051汇编语言,汇编程序 查表求平方的实现
  18. openssl获取der文件中ED448和ED25519私钥和公钥
  19. WORKLIST服务
  20. ffmpeg----avfifo.h

热门文章

  1. mongodb索引--从55.7秒到毫秒级别
  2. 在博客中加入“花絮”效果
  3. Windows环境下启动Mysql服务提示“1067 进程意外终止”的解决方案
  4. Python爬一下抖音上小姐姐的视频~
  5. mysql整理碎片和显示语句错误
  6. 《统一沟通-微软-实战》-5-部署-SharePoint Server 2010
  7. iOS 11 安全区域适配总结
  8. UVA 116 Unidirectional TSP DP
  9. 推荐两款简单好用的图片放大jquery插件
  10. 顶尖程序员不同于常人的 5 个区别