手撸call apply bind
25-04-07 04:43
690
0
如果自己去实现call apply bind,看上去挺复杂,写起来其实就几行代码 因为call和apply一样,只是传参不一样,所以我就只写一个call
实现call(其实只有2行代码)
/* 随便定义一个对象,待会将函数内的this指向指向倒这个对象 */ const obj = { name: "我是需要被绑定改变this指向的对象" }; /* 需要改变this指向的函数,没有使用call时,this指向window */ function fn(arg) { console.log("fn---------", this); console.log("fn---------", arg); } /* * * 重写call方法 * target 需要把this改变到哪个目标 * args 传递进来的参数 */ Function.prototype.call = function (target, ...args) { /* 这里的this就指向上面的fn函数 */ console.log(this); /* 随便定义一个变量,用于在目标对象里存fn函数,这里使用symbol更好 */ target["vhan"] = this; /* 这样target目标上就有个vhan的属性,并且属性值就是fn函数 */ console.log(target); /* 调用这个vhan,并把参数传入进去就实现this改变了 */ target["vhan"](args); /* 防止给target上多出多余没用的参数,在将vhan删除掉 */ delete target["vhan"]; }; fn.call(obj, "我是大帅哥");
实现bind
因为bind的调用方式,是返回一个新函数,在调用一次,例如:fn.bind(null)(options),所以需要用到高阶函数
/* 随便定义一个对象,待会将函数内的this指向指向倒这个对象 */ const obj = { name: "我是需要被绑定改变this指向的对象" }; /* 需要改变this指向的函数,没有使用call时,this指向window */ function fn(arg) { console.log("fn---------", this); console.log("fn---------", arg); } /* * * 重写call方法 * target 需要把this改变到哪个目标 * args 传递进来的参数 */ Function.prototype.bind = function (target) { target["vhan"] = this; /* 这里使用高阶函数接收参数 */ return (...args) => { target["vhan"](args); delete target["vhan"]; }; }; fn.bind(obj)("我是大帅哥!!!");
-
中华古诗文读本
这是一套为“中华古诗文经典诵读”工程编辑的读本。这一套书有下列几个特点:1.全套书为注音读本。为朗读背诵的方便,选编的古诗文都以汉语... 932 0 24-07-14 -
iPhone 所有机型参数大全 / Apple 苹果产品参数中心
网站里涵盖了不少Apple的历代产品,对每个果粉的深度研究,都是有帮助的,同时也可辅助你完成Apple产品各项参数的对比,协助你判断要下手购... 2630 0 24-07-14 -
Photoshop PSD名片模板
689 0 21-07-12 -
购物节抽奖微信小程序
这是一个活动促销的小程序,可以选择区域,进行定图定位,方便使用摇一摇抽奖。功能齐全,可以方便进行扫码和分享。购物节抽奖小程序.exe 1326 0 24-09-10 -
GPT在线 GPT盒子 GPT镜像站
什么是 ChatGPT 镜像网站镜像网站(Mirror Site)是指通过复制原始网站内容和结构,创建的备用网站。其主要目的是在原始网站无法访问时... 1244 0 24-12-11 -
水印相机去广告纯净版
水印相机去广告纯净版是专为追求简洁、高效拍摄体验的用户量身打造的相机应用。在原版今日水印相机的基础上进行了深度优化,彻底去除了... 608 0 25-06-09 -
考研数学电子资料
2022考研《考研数学三大计算》参考答案.pdf2023武忠祥《高频考点必刷题》.pdf【考研数学必备】基本初等函数图像与三角函数公式.pdf【考研数... 1002 0 24-08-19 -
fastadmin微信扫码登录网页登录
基于微信公众号服务号实现的扫码登录,首次扫码绑定后公众号后,授权登录并关注公众号 (关注公众号必须用认证的服务号)可一键扫码即可登录。不使用微信开发平台的扫码登录方法登录 1373 0 21-06-01
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~