手撸call apply bind
25-04-07 04:43
630
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)("我是大帅哥!!!");
-
wordpress资源类主题ripro
RiPro主题可用于搭建素材、源码等付费资源和会员制网站。全新发布,更加专业,资源,素材,源码站运营首选,支付宝原生/当面付、微信扫码/H... 486 0 21-07-12 -
校内网小程序
本小程序包括学校公告,服务通知,校园新闻,校园风光,校园活动,校历,课程表,失物招领,迎新服务,问卷调查,空闲教室,借阅报告,课堂印象等功能模... 1073 0 24-09-11 -
重构 -- 改善既有代码的设计
重构(refactoring)这个概念来自Smalltalk圈子,没多久就进入了其他语言阵营之中。由于重构是framework(架)发中不可缺少的一部分,所以当fam... 745 0 24-05-28 -
PHP刷单交易任务平台源码[附带搭建教程]
PHP刷单交易任务平台源码[附带搭建教程]把源码上传到根目录,导入数据库文件“sjk.sql”打开/protected/config/main.php文件,定位到第67... 546 0 21-07-27 -
tab滑动切换jquery效果
497 0 21-06-04 -
选择并使用Redi的核心数据类型
首先,来看一下 Redis 的核心数据类型。Redis 有 8 种核心数据类型,分别是 :string 字符串类型;list 列表类型;set 集合类型;... 1151 0 24-05-24 -
正则表达式语法规则
正则表达式正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")构成的文字序列,可以是单个的字符、字符集合、字符... 1173 0 25-01-08 -
批量提取word文档标题
import os import sys from collections import defaultdict from docx import Document from PyQt5.QtWidgets import (QApplication, QMai... 1037 0 25-04-08
发表我的评论
共0条评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~