手写call&apply&bind
在这里对call,apply,bind函数进行简单的封装
封装主要思想:给对象一个临时函数来调用,调用完毕后删除该临时函数对应的属性
call函数封装
function pliCall(fn, obj, ...args) {
if (obj === undefined || obj === null) {
obj = globalThis
}
obj.temp = fn
let result = obj.temp(...args)
delete obj.temp
return result
}
apply函数
function pliApply(fn, obj, args) {
if (obj === undefined || obj === null) {
obj = globalThis
}
obj.temp = fn;
let result = obj.temp(...args)
delete obj.temp
return result
}
bind函数
需要注意的是bind()返回的是一个可执行函数
function pliBind(fn, obj, ...args) {
return function (...args2) {
if (obj === undefined || obj === null) {
obj = globalThis
}
obj.temp = fn;
let result = obj.temp(...args, ...args2)
delete obj.temp;
return result
}
}
以上为本阶段学习的一点理解,以后若接触到更多会逐步添加…
若要了解更多,请移步我的个人博客 Plumli
手写call&apply&bind的更多相关文章
- JS手写call、bind、apply
call方法的实现 Function.prototype.MyCall = function(content,...args){ const self = content || window; con ...
- 手写call,bind,apply
//实现call var that = this ; //小程序环境 function mySymbol(obj){ let unique = (Math.random() + new Date(). ...
- 手写call,apply方法实现
call Function.prototype.myCall = function(){ var object = arguments[0]; var arr = []; for(var i = 1; ...
- 前端面试 js 你有多了解call,apply,bind?
函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础扎实,绕不开这些基础 ...
- 手写系列:call、apply、bind、函数柯里化
少废话,show my code call 原理都在注释里了 // 不覆盖原生call方法,起个别名叫myCall,接收this上下文context和参数params Function.prototy ...
- 前端面试手写代码——call、apply、bind
1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...
- 手写简单call,apply,bind
分析一下call的使用方法:call是显示绑定this指向,然后第一个参数是你所指向的this对象,后面跟着多个参数,以逗号隔开 function sum(num1,num2){ return num ...
- 源码来袭:bind手写实现
JavaScript中的this指向规则 源码来袭:call.apply手写实现与应用 理解建议:如果对this指向规则不了解的话,建议先了解this指向规则,最好还能对call和apply的使用和内 ...
- 源码来袭:call、apply手写实现与应用
关于this指向可以了解我的另一篇博客:JavaScript中的this指向规则. 一.call与apply的使用 回顾call与apply的this指向: var value = "win ...
- 依据ECMA规范,手写一个bind函数
Function.prototype.bind 函数,参见ECMA规范地址 如题,这次来实现一个boundFunction函数,不挂载在Function.prototype上,而是一个单独声明的函数. ...
随机推荐
- Cesium 案例(九)示例中小程序集合(1)
因为这几天在忙一些客观上无法逃脱的事,没有大块时间对中大型案例进行学习,所以对官方案例中的代码不超过40行的程序进行了学习.我把他们放在一到两个随笔中. 注:[所有案例中最前面务必加上] 1 Cesi ...
- 人群定向SQL表
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for rc_throng -- ------ ...
- 文盘Rust -- 用Tokio实现简易任务池
作者:京东科技 贾世闻 Tokio 无疑是 Rust 世界中最优秀的异步Runtime实现.非阻塞的特性带来了优异的性能,但是在实际的开发中我们往往需要在某些情况下阻塞任务来实现某些功能. 我们看看下 ...
- 数据库mysql8.0安装+Navicat12
第一次写博客,准备坚持下去把每天学习到的东西记录下来,刚好安装mysql8.0过程中遇到了一些问题并解决,系统win10.致敬博客 首先先粘贴一段mysql的百度百科词条:MySQL是一个关系型数据库 ...
- ArcGIS Pro创建、发布、调用GP服务全过程示例(等高线分析)
在之前的文章介绍过使用ArcMap发布GP分析服务,由于ArcGIS后续不在更新ArcMap,改用ArcGIS Pro,本文对ArcGIS Pro发布GP分析服务进行说明. 本文以等高线分析为例,使用 ...
- C#实现右下角托盘程序,默认不显示窗体,关闭窗体时隐藏而不退出
Windows右下角托盘程序是Windows系统的一大特色.在某些场景非常适用. 因业务需要实现一个后台程序,需要开机自动启动,默认不显示窗体,点击系统右下角托盘图标时显示窗体,关闭窗体时隐藏而不退出 ...
- C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地
本文将探讨如何使用c#开发基于大语言模型的私域聊天机器人落地.大语言模型(Large Language Model,LLM 这里主要以chatgpt为代表的的文本生成式人工智能)是一种利用深度学习方法 ...
- 2022-08-20:给定区间的范围[xi,yi],xi<=yi,且都是正整数, 找出一个坐标集合set,set中有若干个数字, set要和每个给定的区间,有交集。 求set的最少需要几个数。 比如给
2022-08-20:给定区间的范围[xi,yi],xi<=yi,且都是正整数, 找出一个坐标集合set,set中有若干个数字, set要和每个给定的区间,有交集. 求set的最少需要几个数. ...
- Apache Arrow DataFusion原理与架构
本篇主要介绍了一种使用Rust语言编写的查询引擎--DataFusion,其使用了基于Arrow格式的内存模型,结合Rust语言本身的优势,达成了非常优秀的性能指标 DataFusion是一个查询引擎 ...
- 程序员的 Windows 工具箱「GitHub 热点速览」
如何精简 Windows 并快速配置开发环境呢?本周特推的 winutil 是一个程序员的 Windows 工具箱,它提供了开发工具的一键安装以及减少系统垃圾的功能,一切为了简洁.高效.同样高效的还有 ...