首页 > 教程
手撸call apply bind
- 2025-04-07
- 956 ℃
如果自己去实现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)("我是大帅哥!!!");上一篇:一张图片或Div不同位置点击事件
下一篇:class中函数的this指向
相关内容
DeepSeek小白使用指南,9...
公众号主体变更后,批量...
进化式产品创新
3个DeepSeek隐藏玩法,99...
微信怎么看好友是否把你...
推荐39个让你效率提高200...
微信转账查看对方是否把...
微信消费者保护安全锁,...
-
摄影专业分享摄影技巧
2025-06-30 1463
-
H5 端唤醒 win10 消息通知
2025-04-07 979
-
DeepSeek最强使用攻略,放弃复杂提示词,直接提问效果反而更好?
2025-04-30 1370
-
微信拍照模糊调用手机相机拍照更清晰
2025-06-22 1425
-
Ant Design Vue 4.0 a-modal弹窗组件封装
2025-04-07 1052
-
微软超逼真的、带神经网络的中文 TTS怎么使用
2025-04-27 3028
-
互联网分几层?普通人又能看到几层?
2024-05-21 2189
-
通过 SWOT 分析法,看美团优选的先天优势
2024-05-29 2840
-
H5页面移动端软键盘弹出时,底部absolute或者fixed定位被顶上去
2024-03-02 1749
-
视频会员贵,听歌要收费,导航为什么免费
2024-11-26 1451
文章评论 (0)
- 这篇文章还没有收到评论,赶紧来抢沙发吧~


进入有缘空间
点击分享文章