js中 call,apply,bind的区别
call、apply、bind都是改变this指向的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html> <script> let cat = { name: '喵喵' } let dog = { name: '汪汪', eat: function (food) { console.log(`this指向=》${this.name}, 我喜欢吃${food}`) }, eatMore: function (food1, food2) { console.log(`this指向=》${this.name}, 我喜欢吃${food1}和${food2}`) } } // call是函数的方法,可以调用函数 // call的第一个参数可以改变函数中this的指向 // call的第二个参数开始的参数是要传入函数的参数 dog.eat.call(cat) // this指向=》喵喵, 我喜欢吃undefined dog.eat.call(cat, '老鼠') // this指向=》喵喵, 我喜欢吃老鼠 dog.eatMore.call(cat, '老鼠', '鱼') // this指向=》喵喵, 我喜欢吃老鼠和鱼 // apply和call的区别就是传参不一样,apply的参数列表通过数组传递 dog.eatMore.apply(cat, ['老鼠', '鱼']) // this指向=》喵喵, 我喜欢吃老鼠和鱼 // bind的传参方式和call一样 // bind和call以及apply的区别在于bind不会调用函数,而是把函数作为返回值,好处就是方便多次调用 dog.eatMore.bind(cat, '老鼠', '鱼') // 不执行,bind不会主动调用函数 let fn = dog.eatMore.bind(cat, '老鼠', '鱼') fn() // this指向=》喵喵, 我喜欢吃老鼠和鱼 </script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2020-06-17 大数据表格渲染
2019-06-17 Vue --》 如何在vue中调用百度地图