使用js手动实现bind、call、apply功能

复制代码
Function.prototype.mycall = function () {
   const [first, ...rest] = arguments;
   const ctx = first || window;
   ctx.func = this;
   const ret = ctx.func(...rest);
   delete ctx.func;
   return ret;
};
Function.prototype.myApply
= function() { const [first, rest = []] = arguments; const ctx = first || window; ctx.func = this; const ret = ctx.func(...rest); delete ctx.func; return ret; }
Function.prototype.myBind
= function() { const [first, ...rest] = arguments; const ctx = first || window; ctx.func = this; return function() { // 这里不能使用 箭头函数 因为箭头函数没有自己的 arguments 这样设计是为了让参数明确化 return ctx.func(...rest, ...arguments); }; // 返回的是一个函数 }
function show(a, b) { return a + b; }
复制代码

注意:箭头函数没有自己的 arguments,这样设置是为了让函数传递参数 明确化,而不是用使用 arguments来接收

bind函数 可以传递参数,传递的参数 在函数定义的时候 固定下来了,如果在调用函数的时候再次传递参数,那么传递的参数,会追加在 已经固定值的参数

的后面。 但是bind一般都是只传递一个参数改变this指向就够了。

 

绑定的函数不能再次使用apply和call来改变this

 

posted @   escapist  阅读(329)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示