手写call,apply,bind

news/2024/7/24 12:24:28 标签: js, javascript

1. call

javascript">Function.prototype.myCall = function (context) {
	// context 接收第一个参数 如果没有默认用window
	context = context || window
	// 给context.fn 或其他属性赋值为函数, 即myCall的调用者改变函数的this 指向context
	context.fn = this
	// 获取传入的参数
	const args = [...arguments].slice(1)
	// 通过...展开并传给fn args 获取执行结果 result 并返回
	const result = context.fn(...args)
	// 删除fn
	delete context.fn
	return result
}

2. apply

javascript">Function.prototype.myApply = function (context) {
	context = context || window
	context.fn = this
	let result
	if (arguments[1]) {
		result = context.fn(...arguments[1])
	} else {
		result = context.fn()
	}
	delete context.fn
	return result
}

3. bind

javascript">Function.prototype.myBind = function (context) {
	context = context || window
	const args = [...arguments].slice(1)
	let _this = this
	return function f () {
		return _this.apply(context, [...args, ...arguments])
	}
}

http://www.niftyadmin.cn/n/1483371.html

相关文章

C++数据结构——排队等候

习题3-10 排队等候 某社会福利机构组织一项活动&#xff0c;参加的对象分为两类&#xff0c;一类是老年人&#xff08;年龄≥60岁&#xff09;&#xff0c;另一类是年轻人&#xff08;年龄<60岁&#xff09;。但参加该项活动要排队等候&#xff0c;为了照顾老年人&#xff0…

SQL Server活动监视器

打开SQL Server活动监视器&#xff1a; 维护计划打开工具箱&#xff1a; 转载于:https://www.cnblogs.com/dreamer-fish/p/3458443.html

深拷贝与浅拷贝, 手写深拷贝(不考虑原型链)

说明: 浅拷贝对于深层对象引用无法处理 1. 一般使用Object.assign 即可实现单层对象的深拷贝, 但对于多层对象无法生效 2. 一般通过JSON.parse() 和JSON.stringfy() 即可实现简单的深拷贝, 但对于正则, 日期对象等无法完整拷贝如下图所示实现深拷贝 1. 简单的深拷贝 /*简单的…

C++数据结构——迷宫问题之几种走法

迷宫问题之几种走法 小明某天不小心进入了一个迷宫&#xff08;如上图所示&#xff09;。请帮他判断能否出走出迷宫&#xff0c;如果可能&#xff0c;则输出一共有多少种不同的走法&#xff08;对于某种特定的走法&#xff0c;必须保证不能多次走到同一个位置&#xff09;。如果…

Win7关闭HTTP 80端口

目录 问题说明关闭步骤注意事项问题说明 环境是Windows平台&#xff0c;下面介绍只是一次性关闭&#xff0c;关闭某端口的原理&#xff0c;其实就是关闭某个应用程序&#xff0c;或者修改该应用程序所设置的端口&#xff0c;而重启系统之后某程序可能会重新启动&#xff0c;导致…

钱到用时方恨少(随记)

最近有一次投资的机会只可惜平时钱大手大脚花得太厉害了,要用钱的时候却发现没有了 求爷爷靠奶奶到处借钱 哎 难怪祖宗们都说 勤俭节约,是个好习惯来自为知笔记(Wiz)转载于:https://www.cnblogs.com/qinsuixin/p/19ac0990a52cd61edd1b038d275a625f.html

spread 超链接跳转sheet 不触发 GC.Spread.Sheets.Events.ActiveSheetChanged 事件处理

快速跳转1. 发现问题2. 解决思路3. 代码实现1. 发现问题 说明: 1. 在项目中发现使用模板自带的目录超链接跳转sheet 不触发提前设置好的监听, 无法执行后续功能, 影响正常使用 2. 通过电话咨询葡萄城开发人员, 答复: 暂时没有超链接跳转sheet 监听功能 3. 通过查找资料和论坛说…

C++数据结构——迷宫问题之最短时间

迷宫问题之最短时间 小明某天不小心进入了一个迷宫&#xff08;如上图所示&#xff09;&#xff0c;请帮他计算走出迷宫的最少的时间。规定每走一格需要1个单位时间。如果不能走到出口&#xff0c;则输出impossible。每次能走的仅有上、下、左、右4个方向。 输入格式: 测试数据…