javascript中apply、call和bind的使用区别
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢。 在说区别之前还是先总结一下三者的相似之处: 1、都是用来改变函数的this对象的指向的。 2、第一个参数都是this要指向的对象。 3、都可以利用后续参数传参。 那么他们的区别在哪里的,先看一个例子。 var xw = { name : "小王", gender : "男", age : 24, say : function() { alert(this.name + " 在JavaScript中,`apply()`, `call()`, 和 `bind()` 都是用来操作函数的上下文,即改变函数内部 `this` 指向的方法。它们有三个共同点:第一,它们都能改变函数执行时的 `this` 值;第二,第一个参数都是指定的新 `this` 对象;第三,它们都支持传递额外的参数。 让我们看一个例子,假设我们有两个对象 `xw` 和 `xh`: ```javascript var xw = { name: "小王", gender: "男", age: 24, say: function() { alert(this.name + " , " + this.gender + " ,今年" + this.age); } }; var xh = { name: "小红", gender: "女", age: 18 }; ``` `xw.say()` 默认会显示 "小王 , 男 , 今年24"。如果我们想让 `say` 方法显示 `xh` 的数据,我们可以使用这三个方法: 1. 使用 `call()`: ```javascript xw.say.call(xh); ``` 2. 使用 `apply()`: ```javascript xw.say.apply(xh); ``` 3. 使用 `bind()`: ```javascript xw.say.bind(xh)(); ``` 注意,`bind()` 不会立即调用函数,它返回一个新的函数,因此需要加上 `()` 来调用。 接下来,我们探讨 `call()` 和 `apply()` 的区别。假设 `say` 方法增加了两个参数: ```javascript say: function(school, grade) { alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade); } ``` 1. 使用 `call()` 传参: ```javascript xw.say.call(xh, "实验小学", "六年级"); ``` 在这里,参数直接传入,一一对应。 2. 使用 `apply()` 传参: ```javascript xw.say.apply(xh, ["实验小学", "六年级"]); ``` `apply()` 的第二个参数是一个数组,数组元素将作为参数传递给函数。 `bind()` 的传参方式既支持 `call()` 的方式,也支持 `apply()` 的方式: 1. 直接传参: ```javascript xw.say.bind(xh, "实验小学", "六年级")(); ``` 2. 在调用时传参: ```javascript var boundSay = xw.say.bind(xh); boundSay("实验小学", "六年级"); ``` `bind()` 的一个重要特性是它可以部分应用参数,即提前绑定一部分参数,而留出剩余的参数供后续调用时使用: ```javascript var partiallyBoundSay = xw.say.bind(xh, "实验小学"); partiallyBoundSay("六年级"); // 使用新参数覆盖之前的部分应用参数 ``` 总结起来,`call()` 和 `apply()` 都用于立即调用函数并改变 `this` 的值,不同之处在于传递额外参数的方式:`call()` 是按位置传递,`apply()` 是通过数组传递。而 `bind()` 不仅可以改变 `this` 的值,还可以返回一个新的函数,这个新函数可以保留原始函数的 `this` 和部分参数,使得函数调用更灵活。






















- 粉丝: 9
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 培训学习中小学办公软件Office2010word学习笔记.pdf
- 恩网络品牌营销服务说明书--遇见.doc
- 证券交易所综合业务平台市场参与者接口规格说明书.doc
- 基于单片机的模拟电梯系统毕业设计.doc
- 电子商务专业教学指导方案模板.doc
- 通信工程职业生涯规划.doc
- 浅海石油作业无线电通信安全管理规定.doc
- 网络营销广告.pptx
- 国家开放大学电大专科《网络多媒体素材加工》填空题题库.docx
- 调整《AutoCAD》教材内容的授课顺序获奖科研报告论文.docx
- 智能家居之智能照明方案.docx
- 连锁餐饮信息化应用构想(业务部分).pptx
- 流水施工和网络图讲解.pdf
- 天文观测系统工程项目管理总结.doc
- 使用查账-评估软件核查账务有技巧那些?【2017至2018最新会计实务】.doc
- (源码)基于C语言uCOSII框架的乒乓球收集项目.zip


