Javascript手写改变this指向的call()方法
2021/9/7 20:08:11
本文主要是介绍Javascript手写改变this指向的call()方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
call()包含两个参数,第一个是要改变的this指向,第二个是真正的实参,用于函数的继承复用。
目标:编写myCall()实现和call一样的效果
//有两个对象obj和obj2,用myCall调用obj的fun打印出obj2的name和num var obj = { fun: function(arg){ var num = 0 arg.forEach(function(val){ num += val } return this.name + num } } var obj2 = { name:'obj2的name' } console.log(obj.fun.myCall(obj2,1,2,2))
思路:
1、在Function原型下挂载myCall
2、判断this是否是函数,若不是抛出错误
3、将this赋值给传入的对象,注意this是一个函数
4、...arguments接收所有实参,并用splice(1)剔除第一个对象
5、调用新函数,赋值给常量res,删除新函数,返回res
实现:
Function.prototype.myCall = function(context) { //判断是否为函数 if(typeof this !== 'function'){ throw new TypeError('Error') } //context若是空值则指向window context = context || window //接收除对象外的实参 const arg = [...arguments].splice(1) //将this赋给传进来的对象,this是一个函数 context.fn = this //调用对象中的新方法,返回值给res const res = context.fn(arg) //this指向改变,方法执行完毕后,删除该方法 delete context.fn return res }
输出:
obj2的name5
这篇关于Javascript手写改变this指向的call()方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求