js 函数的方法
每个函数都包含两个非继承而来的方法: apply() 、 call()。
两个方法都的用途都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值。
1、 apply() ,接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组;其中,第二个参数可以是 Array 的实例,也可以是 arguments 对象。
2、call(),方法类似 apply() 方法,区别在于接收参数的方式不同;第一个参数是 this 不变,变的是其余参数都直接传递给函数。(需要将参数都列举出来)
事实上,传递参数并非 apply() 、call() 的真正用武之地;他们的强大在于能够扩充函数运行的作用域:
showColor() 也是作为全局函数定义的,当全局作用域中调用它时,对 this.color 求值会变成 window.color ,所以结果是 red。
而 showColor().call(this) 和 showColor().call(window) 则是两种显示地在全局作用域中调用函数的方式,结果自然是 red。
但是当运行 showColor().call(o) 时,函数的执行环境就不一样了,此时函数体内的 this 指向了 o,于是结果显示的是 blue。
结论:使用 call() 或 apply() 来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。
ECMAScript 5 还定义了一个方法: bind(),这个方法会创建一个函数的实例,其 this 值会被绑定到传给 bind() 函数的值:
showColor() 调用 bind() 并传入对象 o,创建了 objShowColor() 函数,这个函数的 this 值等于 o。
因此,即使全局作用域中调用这个函数,也会看到 blue。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现