apply,call,bind函数作用与用法
作用 可以把方法借给其它对象使用,并且改变this的指向
a.apply(b,[3,2]);//this指向由a变为b, a的方法借给b使用
实例:
function add(a,b){
console.log(this)
return a+b;
}
function sub(a,b){
return a-b;
}
//console.log(add(3,2));//指向window
//console.log(add.apply(sub,[3,2]));//指向sub
console.log(sub(3,2));//还是原来的方法 想用add方法可以使用用apply,call,bind函数来实现
1 | 使用apply,call,bind可以任意改变函数或方法的执行上下文,即使它没有被绑定到一个实例的原型上。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function Thing() { } Thing.prototype.foo = "bar" ; function logFoo(aStr) { console.log(aStr, this .foo); } var thing = new Thing(); logFoo.bind(thing)( "using bind" ); //logs "using bind bar" logFoo.apply(thing, [ "using apply" ]); //logs "using apply bar" logFoo.call(thing, "using call" ); //logs "using call bar" logFoo( "using nothing" ); //logs "using nothing undefined" |
使用场景:操作arguments
函数的参数列表arguments是一个类数组对象,虽然它也有“下标”,但它并非真正的数组,所以也不能像数组一样,进行排序操作或者往集合里添加一个新的元素。这种情况下,我们常常会借用Array.prototype对象上的方法。比如想往arguments中添加一个新的元素,通常会借用Array.prototype.push:
(fu在操作arguments的时候,我们经常非常频繁地找Array.prototype对象借用方法。
(function () { Array.prototype.push.call(arguments, 3); console.log(arguments); // 输出[1,2,3]
})(1, 2);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!