手撸call apply bind
25-04-07 04:43
691
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)("我是大帅哥!!!");
-
jquery电脑被黑客攻击页面效果
399 0 21-05-17 -
jQuery单选框跟复选框美化
370 0 21-05-17 -
DESTOON B2B电子商务门户网站管理系统
DESTOON B2B 电子商务门户网站管理系统源码一套完善的 B2B(电子商务)行业门户解决方案。系统基于 PHP+MySQL 开发,采用 B/S 架构,... 555 0 21-07-02 -
全屏切换查看图片
430 0 21-06-02 -
优化设计,在 IO 方面应该注意哪些要点
I/O 基础介绍I/O(Input/Output)意思是输入输出,其实就是数据传递的一个过程,作为后台服务需要更多地与外部进行数据交互,那么就免不了... 900 0 24-05-24 -
PS素材头发头发丝
1004 0 25-04-14 -
jquery弹出双日历选择器
615 0 21-06-04 -
教师资格证考试-小学
1 第一部分 综合素质.pdf2 第二部分 保教知识与能力.pdf2011年下半年教师资格证考试《小学综合素质》真题.pdf2012年上半年教师资格证考... 1289 0 24-08-19
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~