apply()、call()、bind()

每个Function对象都存在apply()call()bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。

使用

apply()call()bind()都能改变函数对象的this指向。

window.name = "A"; // 挂载到window对象的name
document.name = "B"; // 挂载到document对象的name
var s = { // 自定义一个对象sname: "C"
}var rollCall = {name: "Teacher",sayName: function(){console.log(this.name);}
}
rollCall.sayName(); // Teacher// apply
rollCall.sayName.apply(); // A // 不传参默认绑定window
rollCall.sayName.apply(window); // A // 绑定window对象
rollCall.sayName.apply(document); // B // 绑定document对象
rollCall.sayName.apply(s); // C // 绑定自定义对象// call
rollCall.sayName.call(); // A // 不传参默认绑定window
rollCall.sayName.call(window); // A // 绑定window对象
rollCall.sayName.call(document); // B // 绑定document对象
rollCall.sayName.call(s); // C // 绑定自定义对象// bind // 最后一个()是为让其执行
rollCall.sayName.bind()(); //A // 不传参默认绑定window
rollCall.sayName.bind(window)(); //A // 绑定window对象
rollCall.sayName.bind(document)(); //B // 绑定document对象
rollCall.sayName.bind(s)(); // C // 绑定自定义对象

区别

虽然apply()call()bind()都能够达到改变this指针的目的,但是其使用还是有区别的。

// apply与call传参方式不同
window.name = "Teacher";
var rollCall = {sayAllName: function(...args){console.log(this.name);args.forEach((v) => console.log(v));}
}// apply 将参数作为一个数组传递
rollCall.sayAllName.apply(window,["A","B","C"]); // Teacher A B C// call 将参数直接传递,使用逗号分隔
rollCall.sayAllName.call(window,"A","B","C"); // Teacher A B C// bind 仅将对象绑定,并不立即执行,其返回值是一个函数,传参方式与 call 相同
var convertThis = rollCall.sayAllName.bind(window,"A","B","C");
convertThis(); // Teacher A B C

每日一题

https://github.com/WindrunnerMax/EveryDay

apply()、call()、bind()相关推荐

  1. javascript中apply、call和bind的区别

    在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢. 在说区别之前还是先总结一下三者的相似之处: 1.都是用来改变函数的this对象的指向的. 2.第一个参数都是this要指 ...

  2. Javascript 中 apply、call、bind

    在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大 ...

  3. Javascript中的apply、call、bind

    apply . call .bind 三者都是用来改变函数的this对象的指向的: apply . call .bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文: apply . ...

  4. python中bind的用法_JS中的apply、call和bind的用法和区别

    apply和call两种调用方式中的this指向,表现出来的特征就是:对象可以'借用'其他对象的方法 obj对象有一个方法fn,obj1想借用obj的方法fn,可以用obj.fn.apply(obj1 ...

  5. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站. ...

  6. [转] 深入浅出 妙用Javascript中apply、call、bind

    [From] http://www.admin10000.com/document/6711.html 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.ca ...

  7. JS中this的应用场景,再了解下apply、call和bind!

    this的应用场景,再了解下apply.call和bind 一.谈谈对this对象的理解 二.this的应用场景 1.作为普通函数被调用 2.使用call.apply和bind被调用 3.作为对象方法 ...

  8. 深入Javascript中apply、call、bind

    最近在看一下node package的源码,发现很多里面都包含了function这个对象的apply.call.bind这三个方法,于是想拿出来再看看.. apply.call 在 javascrip ...

  9. 【优雅代码】深入浅出 妙用Javascript中apply、call、bind

    这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: "对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂 ...

  10. JavaScript -- arguments、apply 、call、bind

    前言 笔记来源:JavaScript 高级程序设计 笔记内容:apply .call.bind 相同点与不同点 运行环境:浏览器环境 arguments ECMAScript 中的参数在内部是用一个数 ...

最新文章

  1. 2011-2012年《软件工程》本科期末试卷
  2. jQuery Callbacks
  3. 软件架构自学笔记--大学学的软件工程为什么感觉很“虚”
  4. python renames_Python os.renames() 方法
  5. Java学习笔记——封装
  6. 卡写入保护开关原理_老电工带你解密:插卡取电开关
  7. 气体润滑轴承matlab分析,气体润滑轴承的研究与发展
  8. 电机与系统计算机仿真作业,北邮计算机仿真期末大作业.docx
  9. 在用户态下使用uint64_t
  10. 支付宝小程序面向个人开发者公测
  11. 浅谈MySql的存储引擎(表类型)
  12. Annotation实战【自定义AbstractProcessor】
  13. Atitit 软件项目系统托盘图标解决方案
  14. python实现指纹识别毕业论文_指纹识别算法实现-毕业论文
  15. java读写xlsx文件
  16. 日常修行中离不开观想
  17. 向日葵 11.0.0.34335 中文版 (老牌国产远程控制软件)
  18. Netron可视化Pytorch保存的网络模型
  19. 电容笔有必要买吗?双十一性价比高的电容笔推荐
  20. 3D建模软件测试初学者,3D建模软件如何选择?3D建模软件精选

热门文章

  1. Go单元测试--模拟服务请求和接口返回
  2. Go内存管理之代码的逃逸分析
  3. 如何在IDEA中创建并部署JavaWeb程序
  4. free,ps,抓包,网络状态
  5. asp.net mvc中的后台验证
  6. 联动下拉框显示省市县
  7. 腾讯优测-优社区干货精选 |安卓适配之Camera拍照时快门咔嚓声
  8. linux2.6.28内核对bio完成通知的改进--集中走向分离的另一个例子
  9. ajax 防止用户反复提交
  10. 算法高级(33)-拓扑排序-maven依赖关系的确定