apply()、call()、bind()
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()相关推荐
- javascript中apply、call和bind的区别
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢. 在说区别之前还是先总结一下三者的相似之处: 1.都是用来改变函数的this对象的指向的. 2.第一个参数都是this要指 ...
- Javascript 中 apply、call、bind
在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大 ...
- Javascript中的apply、call、bind
apply . call .bind 三者都是用来改变函数的this对象的指向的: apply . call .bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文: apply . ...
- python中bind的用法_JS中的apply、call和bind的用法和区别
apply和call两种调用方式中的this指向,表现出来的特征就是:对象可以'借用'其他对象的方法 obj对象有一个方法fn,obj1想借用obj的方法fn,可以用obj.fn.apply(obj1 ...
- js中bind、call、apply函数的用法
最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站. ...
- [转] 深入浅出 妙用Javascript中apply、call、bind
[From] http://www.admin10000.com/document/6711.html 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.ca ...
- JS中this的应用场景,再了解下apply、call和bind!
this的应用场景,再了解下apply.call和bind 一.谈谈对this对象的理解 二.this的应用场景 1.作为普通函数被调用 2.使用call.apply和bind被调用 3.作为对象方法 ...
- 深入Javascript中apply、call、bind
最近在看一下node package的源码,发现很多里面都包含了function这个对象的apply.call.bind这三个方法,于是想拿出来再看看.. apply.call 在 javascrip ...
- 【优雅代码】深入浅出 妙用Javascript中apply、call、bind
这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: "对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂 ...
- JavaScript -- arguments、apply 、call、bind
前言 笔记来源:JavaScript 高级程序设计 笔记内容:apply .call.bind 相同点与不同点 运行环境:浏览器环境 arguments ECMAScript 中的参数在内部是用一个数 ...
最新文章
- 2011-2012年《软件工程》本科期末试卷
- jQuery Callbacks
- 软件架构自学笔记--大学学的软件工程为什么感觉很“虚”
- python renames_Python os.renames() 方法
- Java学习笔记——封装
- 卡写入保护开关原理_老电工带你解密:插卡取电开关
- 气体润滑轴承matlab分析,气体润滑轴承的研究与发展
- 电机与系统计算机仿真作业,北邮计算机仿真期末大作业.docx
- 在用户态下使用uint64_t
- 支付宝小程序面向个人开发者公测
- 浅谈MySql的存储引擎(表类型)
- Annotation实战【自定义AbstractProcessor】
- Atitit 软件项目系统托盘图标解决方案
- python实现指纹识别毕业论文_指纹识别算法实现-毕业论文
- java读写xlsx文件
- 日常修行中离不开观想
- 向日葵 11.0.0.34335 中文版 (老牌国产远程控制软件)
- Netron可视化Pytorch保存的网络模型
- 电容笔有必要买吗?双十一性价比高的电容笔推荐
- 3D建模软件测试初学者,3D建模软件如何选择?3D建模软件精选