call方法和apply方法
1.call
语法#
1 | call([thisObj[,arg1[, arg2[, [,.argN]]]]]) |
参数#
thisObj 可选项。将被用作当前对象的对象。
arg1,arg2, , argN 可选项。将被传递方法参数序列。
说明#
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
2.apply
语法#
1 | call([thisObj[,arg1[, arg2[, [,.argN]]]]]) |
参数#
thisObj 可选项。将被用作当前对象的对象。
argument[] 数组,被传递方法参数
说明#
apply与call的功能几乎一样,第一个参数意义都一样,只是第二个参数有点不同apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,call从第二个参数开始,依次传值给调用函数的参数
3.call方法和apply 方法的区别
相同点:两个方法产生的作用是完全一样的,都用来改变当前函数调用的对象。
不同点:调用的参数不同:
1 | //下列三行代码作用相同<br>foo.call(this,arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3) |
4.call和apply方法的作用
call方法的作用#
1.修改this指向
2.继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | //例1 window.color = 'red' ; document.color = 'yellow' ; var s1 = {color: 'blue' }; function changeColor(){ console.log( this .color); } changeColor.call(); //red (默认传递参数为globalObj) changeColor.call(window); //red changeColor.call(document); //yellow changeColor.call( this ); //red changeColor.call(s1); //blue //例2 var Pet = { words : '...' , speak : function (say) { console.log(say + '' + this .words) } } Pet.speak( 'Speak' ); // 结果:Speak... var Dog = { words: 'Wang' } //将this的指向改变成了Dog Pet.speak.call(Dog, 'Speak' ); //结果: SpeakWang<br>//例3 function FriendA(name){<br> this.name=name;<br> this.say=function () {<br> console.log('hello');<br> }<br> }<br> function FriendB() {<br> console.log(this);<br> FriendA.call(this,'lucy');<br> console.log(this);<br> } |
例3控制台:
作者:攻城狮?
出处:https://www.cnblogs.com/daiSir/p/11242543.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人