当前位置: 首页 > news >正文

重构内置类Function原型上的call方法

重构内置类Function原型上的call方法

// => 重构内置类Function原型上的call方法
~(function () {/*** call: 改变函数中的this指向*  @params* 	 context 可以不传递,传递必须是引用类型的值,因为后面要给它加 fn 属性**/function myCall(context) {// => context: call方法中的第一个参数 => 执行上下文/执行主体,即this的指向// => this: fncontext = context || window;let args = [],ret = null; // => args要存方法执行时传入的除第一个参数后的所有参数,ret用来接收函数执行返回的结果for (var i = 1; i < arguments.length; i++) {args.push(arguments[i]);}context.foo = this; // => 为对象添加 foo 方法, this指向调用myCall的函数ret = context.foo(...args); // => 函数执行, ...扩展运算符把数组中的每一项展开delete context.foo; // => 删除添加的方法(到这一步foo已经没用了)return ret;}Function.prototype.call = myCall; // => 扩展到内置类的原型上
})();// => 验证
let obj = {name: "obj name",
};
function fn(n, m) {console.log(this);return n + m;
}
fn(); // => this: window
fn.call(obj, 100, 200); // this: obj

代码优化:

~(function () {function myCall(context = window) {context.foo = this;let args = [...arguments].slice(1),ret = context.foo(...args);delete context.foo;return ret;}Function.prototype.call = myCall;
})();

希望给你们带来帮助,有更好的方法也希望发出来呦,期待你们的指点

相关文章:

重构内置类Function原型上的call方法

重构内置类Function原型上的call方法 // > 重构内置类Function原型上的call方法 ~(function () {/*** call: 改变函数中的this指向* params* context 可以不传递&#xff0c;传递必须是引用类型的值&#xff0c;因为后面要给它加 fn 属性**/function myCall(context) {/…...

Nginx之lnmp架构

目录 一.什么是LNMP二.LNMP环境搭建1.Nginx的搭建2.安装php3.安装数据库4.测试Nginx与PHP的连接5.测试PHP连接数据库 一.什么是LNMP LNMP是一套技术的组合&#xff0c;Llinux&#xff0c;Nnginx&#xff0c;Mmysql&#xff0c;Pphp 首先Nginx服务是不能处理动态资源请求&…...

C# 使用FFmpeg.Autogen对byte[]进行编解码

C# 使用FFmpeg.Autogen对byte[]进行编解码&#xff0c;参考&#xff1a;https://github.com/vanjoge/CSharpVideoDemo 入口调用类&#xff1a; using System; using System.IO; using System.Drawing; using System.Runtime.InteropServices; using FFmpeg.AutoGen;namespace F…...

websocket是多线程的嘛

经过测试, onOpen事件的threadId和onMessage的threadId是不一样的&#xff0c;但是onMessage的threadId一直是同一个&#xff0c;就是说收消息的部分是单线程的&#xff0c;收到第一个Message后如果给它sleep较长时间&#xff0c;期间收到第二个&#xff0c;效果是它在排队&am…...

CentOS7.9 禁用22端口,使用其他端口替代

文章目录 业务场景操作步骤修改sshd配置文件修改SELinux开放给ssh使用的端口修改防火墙&#xff0c;开放新端口重启sshd生效 相关知识点介绍sshd服务SELinux服务firewall.service服务 业务场景 我们在某市实施交通信控平台项目&#xff0c;我们申请了一台服务器&#xff0c;用…...

2023国赛 高教社杯数学建模ABCDE题思路汇总分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…...

【网络层+数据链路层】深入理解IP协议和MAC帧协议的基本原理

文章目录 前言一、IP协议二、MAC帧协议 1.以太网2.以太网帧&#xff08;MAC帧&#xff09;格式报头3.基于协议讲解局域网转发的原理总结 前言 为什么经常将TCP/IP放在一起呢&#xff1f;这是因为IP层的核心工作就是通过IP地址来定位主机的&#xff0c;具有将一个数据报从A主机…...

银行家算法【学习算法】

银行家算法【学习算法】 前言版权推荐银行家算法7.避免死锁7.1 系统安全状态7.2 利用银行家算法避免死锁 Java算法实现代码结果 最后 前言 2023-8-14 18:18:01 以下内容源自《【学习算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台…...

萤石直播以及回放的接入和销毁

以下基于vue项目 1.安装 npm i ezuikit-js 2、导入 main.js中 import EZUIKit from "ezuikit-js"; //导入萤石Vue.use(EZUIKit); 3、创建容器 <div class"video"><div id"video-container"></div><!-- <iframe :src…...

C语言易错知识点总结2

函数 第 1 题&#xff08;单选题&#xff09; 题目名称&#xff1a; 能把函数处理结果的二个数据返回给主调函数&#xff0c;在下面的方法中不正确的是&#xff1a;&#xff08; &#xff09; 题目内容&#xff1a; A .return 这二个数 B .形参用数组 C .形参用二个指针 D .用…...

Go学习-Day1

Go学习-Day1 个人博客&#xff1a;CSDN博客 打卡。 Go语言的核心开发团队&#xff1a; Ken Thompson (C语言&#xff0c;B语言&#xff0c;Unix的发明者&#xff0c;牛人)Rob Pike(UTF-8发明人)Robert Griesemer(协助HotSpot编译器&#xff0c;Js引擎V8) Go语言有静态语言的…...

冠达管理:机构密集调研医药生物股 反腐政策影响受关注

进入8月&#xff0c;跟着反腐事件发酵&#xff0c;医药生物板块呈现震荡。与此一起&#xff0c;组织出资者对该板块上市公司也展开了密集调研。 到昨日&#xff0c;8月以来就有包含南微医学、百济神州、维力医疗、方盛制药等12家医药生物板块的上市公司接受组织调研&#xff0c…...

安装Tomac服务器——安装步骤以及易出现问题的解决方法

文章目录 前言 一、下载Tomcat及解压 1、选择下载版本&#xff08;本文选择tomcat 8版本为例&#xff09; 2、解压安装包 二、配置环境 1、在电脑搜索栏里面搜索环境变量即可 2、点击高级系统设置->环境变量->新建系统变量 1) 新建系统变量&#xff0c;变量名为…...

JVM 性能优化思路

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 一般在系统出现问题的时候&#xff0c;我们会考虑对 JVM 进行性能优化。优化思路就是根据问题的情况&#xff0c;结合工具进行问题排查&#xff0c;针对排查出来的可能问题…...

Labview解决“重置VI:xxx.vi”报错问题

文章目录 前言一、程序框图二、前面板三、问题描述四、解决办法 前言 在程序关闭前面板的时候小概率型出现了 重置VI&#xff1a;xxx.vi 这个报错&#xff0c;并且发现此时只能通过任务管理器杀掉 LabVIEW 进程才能退出&#xff0c;这里介绍一下解决方法。 一、程序框图 程序…...

2023河南萌新联赛第(五)场:郑州轻工业大学C-数位dp

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 给定一个正整数 n&#xff0c;你可以对 n 进行任意次&#xff08;包括零次&#xff09;如下操作&#xff1a; 选择 n 上的某一数位&#xff0c;将其删去&#xff0c;剩下的左右部分合并。例如 123&#xff0c;你可以选择…...

找不到mfc140u.dll怎么办?mfc140u.dll丢失怎样修复?简单三招搞定

最近我遇到了一个问题&#xff0c;发现我的电脑上出现了mfc140u.dll文件丢失的错误提示。这个错误导致一些应用程序无法正常运行&#xff0c;让我感到非常困扰。经过一番研究和尝试&#xff0c;我终于成功修复了这个问题&#xff0c;并从中总结出了一些心得。 mfc140u.dll丢失原…...

了解 Langchain️是个啥?:第 1 部分

一、说明 在日常生活中&#xff0c;我们主要致力于构建端到端的应用程序。我们可以使用许多自动 ML 平台和 CI/CD 管道来自动化 ml 管道。我们还有像Roboflow和Andrew N.G.的登陆AI这样的工具来自动化或创建端到端的计算机视觉应用程序。 如果我们想在OpenAI或拥抱脸的帮助下创…...

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库&#xff0c;一套典型的移动端办公工具型APP Axure RP原型模板&#xff0c;可根据实际的产品需求进行扩展&#xff0c;也可以作为移动端原型设计的参考案例。为提升本作品参考价值&#xff0c;在模板设计过程中尽量追求…...

【JAVA】我们常常谈到的方法是指什么?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言方法方法的分类方法的定义方法调用方法重载 前言 在之前的文章中我们总是会介绍到类中的各式各样的方法&#xff0c;也许在应用中我们对它已经有了初步的了解&#xff0c;今…...

从开箱到调试:手把手带你玩转PLS UAD2Pro调试器与TC277评估板

从开箱到调试&#xff1a;手把手带你玩转PLS UAD2Pro调试器与TC277评估板 第一次拿到专业调试工具时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。作为嵌入式开发领域的"瑞士军刀"&#xff0c;PLS UAD2Pro调试器搭配Infineon TC277评估板的组合&#xff0c;能…...

从“手扫感应灯”拆解开始:聊聊三极管放大电路在生活中的那些实用设计

从“手扫感应灯”拆解开始&#xff1a;聊聊三极管放大电路在生活中的那些实用设计 每次深夜回家&#xff0c;摸黑找开关的体验总让人抓狂。直到我在玄关装了一盏挥手即亮的感应灯&#xff0c;这个不到50元的小玩意儿彻底改变了我的生活习惯——无需触碰&#xff0c;手在灯前轻轻…...

深入解析航顺HK32F030C8T6与STM32F030的兼容性差异及实战调优

1. 航顺HK32F030C8T6与STM32F030的硬件差异解析 第一次拿到航顺HK32F030C8T6这颗国产MCU时&#xff0c;我下意识以为它和STM32F030可以完全互换。但实际在智能家居项目中踩坑后才发现&#xff0c;两者的硬件差异远比想象中多。最明显的区别就是主频——STM32F030最高只能跑到48…...

每日更新源码:解锁商业项目新可能的密钥

在数字化转型浪潮席卷全球的今天&#xff0c;企业对于高效、安全、可定制化的技术解决方案需求愈发迫切。无论是初创公司快速搭建电商平台&#xff0c;还是传统企业升级官网提升品牌形象&#xff0c;源码下载网站已成为开发者与创业者获取核心资源的重要渠道。本文将深入探讨一…...

ooderAgent 龙虾时代的统一认证体系

当 Agent 从"工具"进化为"伙伴"&#xff0c;账户体系如何重新定义人机协作的信任边界&#xff1f; ​ 协议版本&#xff1a;ooderAgent v1.0.0 | 发布日期&#xff1a;2026-04-08 | 维护团队&#xff1a;ooderAgent Team 一、引言&#xff1a;从 0.7.3 到 …...

算法工具箱之前缀和

前缀和概念&#xff1a;前缀和&#xff08;Prefix Sum&#xff09;是一种重要的预处理技术&#xff0c;能够在O(1)时间内快速计算数组任意区间的和。核心思想&#xff1a;对于数组nums&#xff0c;我们预先计算一个前缀和数组prefix&#xff0c;其中&#xff1a;prefix[i]表示n…...

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作范围最小化实践

OpenClaw权限管理&#xff1a;千问3.5-35B-A3B-FP8操作范围最小化实践 1. 为什么需要限制OpenClaw的权限 去年夏天&#xff0c;我在本地部署OpenClaw对接千问3.5模型时&#xff0c;曾因为一个简单的文件整理指令差点酿成大祸。当时我让AI帮我整理下载文件夹&#xff0c;结果它…...

【2025最新】基于SpringBoot+Vue的游戏销售平台管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的飞速发展&#xff0c;数字化娱乐产业迎来了前所未有的增长机遇。游戏作为数字娱乐的核心组成部分&#xff0c;其市场规模逐年扩大&#xff0c;用户需求日益多样化。传统的游戏销售模式已无法满足现代消费者的便捷性和个性化需求&#xff0c;亟需一个高效…...

别再手动整理了!用这招自动同步思维导图到Markdown(支持ProcessOn/XMind/MindNode)

思维导图与Markdown自动化同步实战指南 每次会议结束后的文档整理是否让你头疼&#xff1f;技术文档的频繁更新是否消耗了你大量时间&#xff1f;本文将为你揭示一套零干预的自动化工作流&#xff0c;只需专注思维导图创作&#xff0c;Markdown文档会自动同步更新。告别复制粘贴…...

旋转编码器底层驱动库:轻量级正交解码与抗抖动设计

1. 旋转编码器底层驱动库技术解析与工程实践旋转编码器&#xff08;Rotary Encoder&#xff09;是嵌入式系统中最为基础且高频使用的机电输入设备之一&#xff0c;广泛应用于工业HMI、电机调速面板、音频设备音量调节、医疗设备参数设定等场景。其核心价值在于提供无触点、高寿…...