手写call、apply、bind

news/2024/9/18 13:42:36/ 标签: 前端, javascript, vue.js

一、手写call

javascript">const person = {name:'zhangsan'}
function foo(numA,numB){console.log(this)console.log(numA,numB)return numA + numB
}// 手写call
Function.prototype.mycall = function(thisArg,...args){ // 手写callconst key = Symbol('key') // 唯一标识符thisArg[key] = this // 绑定thisconst res = thisArg[key](...args) // 展开参数delete thisArg[key] // 清除return res
}const res = foo.mycall(person,1,2) // thisArg = person
console.log(res)

二、手写apply

javascript">Function.prototype.myapply = function(thisArg,args){const key = Symbol('key')thisArg[key] = thisconst res = thisArg[key](...args)delete thisArg[key]return res
}const person = {name:'zhangsna'}
function foo(numA,numB){console.log(this)console.log(numA,numB)return numA+numB
}
const res = foo.myapply(person,[1,2])
console.log(res)

三、手写bind

javascript">// 手写bind
Function.prototype.myBind = function(thisArg,...args){// 返回新函数return (...reArgs)=> this.call(thisArg,...args,...reArgs)
}const person = {name:'zhangsan'}
function foo(numA,numB,numC,numD){console.log(this)console.log(numA,numB,numC,numD)return numA + numB + numC + numD
}
const bindFunc = foo.myBind(person,1,2)
const res = bindFunc(3,4)
console.log(res)


http://www.ppmy.cn/news/1524593.html

相关文章

小程序的右侧抽屉开关动画手写效果

<template><view><button click"openDrawer">打开抽屉</button><view v-if"showDrawer" class"drawer" :style"{ backgroundColor: bgColor }" click"closeDrawer"><view class"draw…

docker 重启容器且修改服务映射端口

要重启 Docker 容器并修改服务的映射端口,可以按照以下步骤进行操作: 1. 停止当前运行的容器 如果你想重新配置端口,通常需要先停止当前运行的容器。你可以使用以下命令停止容器: docker stop <container_name_or_id>2. 删除现有容器 为了修改端口映射,你需要删…

AI应用 | 超好玩的“汉语新解“ - 文末有Prompt

最近群里玩“汉语新解”的文字卡片贼多 感觉很新颖 本来AI是无法生成固定的图的 但是使用html格式&#xff0c;来生成固定图片的想法还是很不错的 看看效果 使用很简单 把提示词喂给Ai即可 随便一个大模型都可以&#xff0c;比如ChatGPT、通义千问、kimi等等 提示词(Prompt)如下…

关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf

一、关于linux里的df命令以及inode、数据块-stat链接数 Linux中df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计&#xff0c;平常这个命令也用得很多&#xff0c;但一般就是使用df -h查看各个分区的空间使用情况&#xff0c;除此外也可以使用df查看当前linux系统…

多张GPU卡

from transformers import pipeline from accelerate import init_empty_weights, infer_auto_device_map from transformers import AutoModelForCausalLM, AutoTokenizer 初始化加速器 from accelerate import Accelerator accelerator Accelerator() 加载模型和 tokeni…

OpenCVSharp直方图和傅里叶变换介绍

文章目录 1. 直方图计算2. 傅里叶变换3. 直方图均衡化4. 傅里叶逆变换5. 直方图匹配1. 直方图计算 直方图是图像处理中常用的工具,用于表示图像中像素值的分布情况。OpenCVSharp 提供了 Cv2.CalcHist 方法来计算图像的直方图。 详细介绍   直方图计算可以帮助我们了解图像的…

菜鸟入门Docker

初始Docker Docker的概念 Docker的用途 DOcke的安装 Docker架构 配置Docker镜像加速器 Docker常用命令 Docker服务相关的命令。 Docker镜像相关的命令 Docker容器相关的命令 容器的数据卷 数据卷的概念和作用 配置数据卷 Docker应用部署 Docker部署mysql Docker…

Java怎么把多个对象的list的数据合并

1.示例一&#xff1a;创建几个包含Person对象的List&#xff0c;并将它们合并成一个新的List 在Java中&#xff0c;将多个对象的List合并通常涉及到遍历这些List并将它们的元素添加到一个新的List中。这里&#xff0c;我将给出一个详细的代码示例&#xff0c;该示例将展示如何…

项目管理:如何确保目标的实现?

李华作为项目经理&#xff0c;正引领团队研发一款的智能系统。面对项目的复杂性和紧迫性&#xff0c;李华决定引入进度猫这一项目管理工具&#xff0c;以确保项目目标的顺利实现。 1、明确目标与愿景 在项目启动之初&#xff0c;李华组织了一次全面的项目规划会议。 会上&am…

React 项目中使用 axios 进行 HTTP 请求时,封装 get、put、post 等请求方法

在 React 项目中使用 axios 进行 HTTP 请求时&#xff0c;你可以封装 get、put、post 等请求方法&#xff0c;使代码更简洁、复用性更高。尤其是对于 GET 请求&#xff0c;需要将对象参数解析并拼接到 URL 中。 以下是封装 axios 请求的一个简单示例&#xff0c;包括如何处理 …

laravel 11 区分多模块的token

数据表&#xff1a;用户表&#xff08;users&#xff09;、管理员表&#xff08;admin_user&#xff09;&#xff0c; 配置bootstrap/app.php guards > [web > [driver > session,provider > admin_users,],home > [driver > sanctum,provider > users,]…

Sentence-BERT实现文本匹配【CoSENT损失】

引言 还是基于Sentence-BERT架构&#xff0c;或者说Bi-Encoder架构&#xff0c;但是本文使用的是苏神提出的CoSENT损失函数1。 点击来都是缘分&#xff0c;之前过时的方法可以不细看&#xff0c;别的文章可以不收藏&#xff0c;现在是最流行的方法&#xff0c;这篇文章建议收藏…

App推广新姿势:Xinstall带你玩转安装页面拉起功能!

在移动互联网时代&#xff0c;App已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着App数量的不断增加&#xff0c;如何让自己的App在众多竞争者中脱颖而出&#xff0c;成为推广者面临的一大难题。今天&#xff0c;我们就来聊聊一个神奇的解决方案——Xinstall&#x…

项目日志——日志器模块一部缓冲区的设计、实现、测试

文章目录 异步缓冲区模块模块设计缓冲区设计单个缓冲区 实现测试 异步缓冲区模块 模块设计 异步日志器的思想是为了避免业务线程因为写日志的过程时间较长而长时间阻塞 异步日志器的工作就是把业务输出的日志内容放入内存缓冲区中&#xff0c;使用专门的线程进行日志写入 这…

C2免杀--手工shellcode编译,shellcode免杀思路

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理C2免杀中 shellcode代码免杀的相关部分 shellcode概念 我们也不啰嗦&#xff0c;我直接直观的描述一下他。 他就是一串机器能运行的代码&#xff0c;但是他不是正统的python&#xff0c;c&#xff…

vulhub spring 远程命令执行漏洞(CVE-2022-22963)

1.打开环境 进入环境所在的文件夹 docker-compose up -d 一键启动容器 2.浏览器访问环境 3.抓包 http://192.168.10.233:8080/functionRouter进行抓包 抓包修改请求方式 4.修改请求体内容 spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().e…

C++内存布局

文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局 1.文字介绍 1.内核态空间 2.用户态空间 (1)栈区&#xff1a;存储局部变量和函数调用的相关信息&#xff0c;栈的特点是自动分配和释放&#xff0c;由操作系统管理。栈由高地址向低地址生长&#xff0c;通常为0x…

HTTP 协议的工作过程

当我们在浏览器输入一个网址&#xff0c;此时浏览器就会给对应的服务器发送一个 HTTP 请求&#xff0c;对应的服务器收到这个请求之后&#xff0c;经过计算处理&#xff0c;就会返回一个 HTTP 响应。并且当我们访问一个网站时&#xff0c;可能涉及不止一次的 HTTP 请求和响应的…

C#索引器(Indexer)

索引器(Indexer)允许一个对象可以像数组一样使用下标的方式来访问. 当为类定义一个索引器时,该类的行为就会像一个虚拟数组(virtual array) 一样.可以使用数组访问运算符[]来访问该类的成员. 语法 一维索引器的语法如下: element-type this[int index] { // get 访问器 …

python 实现gamma 伽玛功能算法

gamma 伽玛功能算法介绍 Gamma&#xff08;伽玛&#xff09;功能算法通常与不同的领域和应用相关&#xff0c;包括但不限于图像处理、光学测试、数学计算等。以下是根据您提供的搜索结果&#xff0c;对Gamma伽玛功能算法的一些概述&#xff1a; 在图像处理中的Gamma校正 在图…