bind(),apply()和call()

bind(),apply()和call()

总结一下,call、apply 和 bind 的作用都是改变 this 的指向,其中 call 和 apply 的区别在于它们传参的方式不同——call可以传多个形参,而apply只能传一个数组形参。

而bind和call、apply的区别在于bind不会立即调用,而是返回一个函数对象,因此开发中一般用bind比较多

 

保留两个API没什么特殊的原因,只是为了开发方便。如果参数比较多,或者已经是数组形式存储,用apply()方便一点。社区还有一句口诀:A useful mnemonic is "A for array and C for comma."(一个有用的助记是“A代表数组,C代表逗号。)

 

复制代码
            function add(a, b) {
                return a + b;
            }
            function sub(a, b) {
                return a - b;
            }
            // apply的用法
            var a1 = add.apply(sub, [4, 2]);  //sub调用add的方法
            var a2 = sub.apply(add, [4, 2]);
            alert(a1);  //6     
            alert(a2);  //2
            // call的用法
            var b1 = add.call(sub, 4, 2);
            alert(b1);  //6 
            // bind的用法
            var c1 = add.bind(sub,4, 2)
            alert(c1()); //6
复制代码

 

参考

apply()和call()的区别

https://www.cnblogs.com/lengyuehuahun/p/5643625.html

posted @   泠风lj  阅读(66)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示