call和apply的作用1:调用方法,和直接调用的效果是一样的
function test() { console.log('test') } test() // test test.call() // test test.apply() // test
call和apply的作用2:改变this的指向
call和apply传入的第一个参数,把参数的this指向这个传入的实参
test(){ console.log(this) } var obj = {name:'zs'} test() // this指向window test.call(obj) // this指向obj test.apply(obj) // this指向obj
call和apply可以传入其他参数(非第一个参数),传参方式不同
call传入的其他参数,直接传。apply需要传数组
test(a,b){ console.log(a) console.log(b) } var obj = {name:'zs'} test.call(obj,2,3) // call直接传2和3,打印2 ,3 test.apply(obj,[2,3]) // apply传数组,打印2,3
call的实际用法:
获取来的dom元素,不具有数组的特性,不能使用数组的方法,例如pop,push等
可以通过一个方法把获取来的dom元素转换成数组,使它可以使用数组的方法
Array.prototype.slice.call(document.querySelector('div')) // 这个方法也没什么用的啊,把dom变成数组用展开操作符就行了,写那么长,update in 2021.6.3
这样获取的dom元素就是一个数组,可以使用数组的方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通