Javascript实现call,bind,apply的代码怎么写
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍了Javascript实现call,bind,apply的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Javascript实现call,bin
千家信息网最后更新 2025年01月20日Javascript实现call,bind,apply的代码怎么写
这篇文章主要介绍了Javascript实现call,bind,apply的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Javascript实现call,bind,apply的代码怎么写文章都会有所收获,下面我们一起来看看吧。
1.检查当前调用的是否为函数
2.如果当前没有传入指向的this,则赋值为window
3.将fn指向当前调用的函数
4.获取传入的参数
5.将参数传入fn进行调用
6.将对象上的fn删除
7.返回结果
//普通call的实现 function hello(){ console.log('hello 我是'+this.name); }; let person = { name:'krys' }; var name = 'liang';//只有var的变量属于window hello();// 'hello 我是liang' hello.call(person);//'hello 我是krys' hello.call();//'hello 我是liang' let person2 = { name:'lwl' } Function.prototype.mycall = function(context){ //不传入参数的时候,默认为window if(typeof this !== "function"){ throw new TypeError('Error'); } context = context || window; context.fn = this;//fn就是上面的hello方法 const args = [...arguments].slice(1);//第一个参数不要 const result = context.fn(...args);//把剩下的其他参数传给hello delete context.fn; return result; } hello.mycall(person2);
function getParams(){ console.log('我是',this.name,'获取一些参数',...arguments); } let person3 = { name:'hhh' }; getParams.apply(person3,['hello','world']) Function.prototype.myApply = function(context){ if(typeof this !== "function"){ throw new TypeError() } context = context || window; context.fn = this; let result; if(arguments[1]){ //如果有传入参数数组 console.log(arguments[1]) result = context.fn(...arguments[1]); }else{ result = context.fn(); } delete context.fn; return result; } getParams.myApply({name:'llll'},['jjj','kkkk','llll']);
function getParams(){ console.log('我是',this.name,'获取一些参数',...arguments); } let person3 = { name:'hhh' }; let person4 = { name:'tttt' }; getParams.bind(person3,'hello','world') getParams.bind(person4,'hello','world')('jjj','kkk'); Function.prototype.myBind = function(context){ if(typeof this !== "function"){ throw new TypeError() } context = context || window; const _that = this; const args = [...arguments].slice(1); return function F(){ if(this instanceof F){ return new _that(...args,...arguments);//这里的arguments是上面的jjj kkk } return _that.apply(context,args.concat(...arguments));//这里的arguments是上面的jjj kkk } } getParams.myBind({name:'llll'},'jjj','kkkk','llll')('hhhhllll');
关于"Javascript实现call,bind,apply的代码怎么写"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Javascript实现call,bind,apply的代码怎么写"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
参数
代码
知识
面的
内容
函数
指向
篇文章
普通
价值
变量
只有
对象
就是
操作简单
数组
文章
方法
时候
易懂
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
山东蓝狐网络技术有...
做数据库实验的实验心得
移动合作的服务器公司有哪些
csgo社区截图服务器
戴尔r740服务器格式化
软件开发文档扫描文件
软件开发资质出租
消逝的光芒2服务器链接
学软件开发去哪学比较好
城主武器数据库
搭建ikev2服务器
全国青少年网络安全条例
第一次搭建数据库集群
软件开发工程师高大上的叫法
标题网络安全研究的内容有哪些
网络安全最权威培训机构
网络安全知识竞赛只答了1次
解决监控网络安全问题刻不容缓
网络技术三级很容易吗
网络安全团日活动通知
服务器哪里可以不备案
网络安全技术及成果
数据库约束条件不大于0怎么写
找出带表的数据库
waves服务器调音台
网络安全班讨论个人发言
autocad软件开发商
软件开发人天报价 标准
中医诊断数据库的完善
刀片服务器关机