位置: 编程技术 - 正文

JS中使用apply、bind实现为函数或者类传入动态个数的参数(js中的apply方法)

编辑:rootadmin

推荐整理分享JS中使用apply、bind实现为函数或者类传入动态个数的参数(js中的apply方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js apply 实现原理,js中的apply方法,js如何使用,js中apply的用法,js中apply的用法,Js中使用@if shiro,js实现apply函数,js中apply的用法,内容如对您有帮助,希望把文章链接给更多的朋友!

为纪念年没写blog,第一篇博文就以这样一个有趣的窍门开始吧 -___-

在ES5中,当我们调用一个函数时,如果要传入的参数是根据其他函数或条件判断生成的,也就是说不确定会传入多少个参数时,在不改变原函数的情况下该如何办呢?

(当然了,能避免此文所述情况发生就尽量避免,比如将参数改为object或array等等)

大部分人可能知道用apply能完美解决这个问题:

apply与call一样会将第一个参数作为函数的调用对象,即改写了调用函数内的this指针为第一个参数,如果不是对象的方法,可以不考虑this,传入一个null即可。

而不同之处在于后面的参数,apply将所有要传入调用函数的参数放在一个数组中,call是与原函数一样依次追加进去。

既然是数组那就可控了,根据其他函数或逻辑判断来生成数组,可达到传入动态个数参数的目的。

JS中使用apply、bind实现为函数或者类传入动态个数的参数(js中的apply方法)

但是我遇到一个头疼的问题,要在用new创建对象时传入动态个参数,几年才遇到一次的问题:

如果是用ES6,有了rest参数,上述问题全都不是问题。注意,数组args前面加三个点并不是语法错误,而是ES6提供的rest参数写法,你可以理解为将...args替换为args数组去掉方括号后的字符。

但ES5里真的就没有办法实现了吗?毕竟ES6大部分都是语法糖,可以用babel一类的工具编译为ES5,带着疑问,我们就用babel编译一下看看得到什么:

看到最后一行惊呆了,别害怕,让我们分析一下这句代码。首先肢解一下,分三步来看:

1. 毫无疑问,用concat将null与我们的参数连接为一个数组,作为apply第二个参数,即得到[null, 1, 2, 3];

2. 让我们运算一下apply,第一个参数Foo会取代Function来调用原生的bind方法,第二个参数数组的内容将作为bind的参数传入,即得到Foo.bind(null, 1, 2, 3);

3. bind方法第一个参数与apply、call类似,修改this指针,而后面的参数可以为函数植入默认的前置参数值(preset leading argument),也就是说当bind执行完后在第一组小括号内我们得到一个已经注入了三个参数值的Foo类,暂且叫FooWithArgs;

最终,当我们 new FooWithArgs(); 时,就不用传入任何参数了。等同于 new Foo(1, 2, 3);

AngularJS实现textarea记录只能输入规定数量的字符并显示 AngularJS是一个MV*框架,最适于开发客户端的单页面应用。它不是个功能库,而是用来开发动态网页的框架。它专注于扩展HTML的功能,提供动态数据绑定

Bootstrap表单组件教程详解 表单常见的元素主要包括:文本输入框、下拉选择框、单选框、复选框、文本域、按钮等。下面是不同的bootstrap版本:LESS:forms.lessSASS:_forms.scssbootstrap仅

js 求时间差的实现代码 vardate1=newDate();//开始时间vardate2=newDate();//结束时间vardate3=date2.getTime()-date1.getTime()//时间差的毫秒数//计算出相差天数vardays=Math.floor(date3/(**))//计算

标签: js中的apply方法

本文链接地址:https://www.jiuchutong.com/biancheng/373344.html 转载请保留说明!

上一篇:基于vue.js快速搭建图书管理平台(使用vue-cli快速搭建vue项目)

下一篇:AngularJS实现textarea记录只能输入规定数量的字符并显示(angularjs2)

  • 利润表里面的所得税
  • 应税工资怎么计算出来的
  • 建筑业老项目如何界定
  • 代理记账公司账本
  • 差旅费处理会计分录
  • 工人工伤误工费赔偿多少一天
  • 咨询公司所得税税负率是多少合适
  • 办理外经证后缴税怎么交
  • 报销应聘人员差旅费
  • 折旧完的固定资产出售
  • 医院收到工会的钱怎么办
  • 提取法定盈余公积比例
  • 劳务公司购买材料怎么做账
  • 营改增后向境外提供有偿服务是否需要缴纳增值税?
  • 非独立核算的分公司如何报税
  • 发票章丢失风险大吗
  • 二房东税务局开发票
  • 建筑业商业保险受益人可以是公司吗
  • 工程款增值税怎么算
  • 实收资本印花税最新规定
  • 分配利润账务处理
  • 贷款利息支出属于
  • 招待费进项税能抵扣嘛
  • 一般纳税人怎么计算增值税
  • 应付票据发生与偿还怎么计算?
  • 收到工会经费返还如何做账
  • 在win10中怎么从edge旧ie浏览器
  • 华为手机屏幕变成黑白怎么调回来
  • windows右键刷新总是卡住
  • win7为什么现在不能用了
  • 收到即征即退退的发票
  • 高新企业收到政府补贴
  • 法定盈余公积金转增资本
  • 礼品应该计入会计分录
  • 工资及社保外包服务
  • 自制原始凭证包括哪些凭证
  • php require的用法
  • 已销售未出库如何结转成本
  • opencv1.0安装
  • php 验证类
  • php技术
  • 存货采购成本有余额吗
  • 土方工程合同签了一般多久开工
  • 异地预缴的附加税在申报税时会抵消掉么
  • 财务报表季报利润表本月金额怎么填
  • mysql的一些命令
  • 出租车发票可以重新打印吗
  • 工资不纳税项目
  • SQL Server 2008+ Reporting Services (SSRS)使用USER登录问题
  • 合并报表存货的计税基础
  • 研发费用加计扣除的条件
  • 不动产出租要交什么税
  • 公司从个人手中购买设备
  • 进项转出再转入
  • 老板出差带礼物给员工的说说
  • 预付账款要设明细科目吗
  • 应交增值税一转出未交增值税
  • 房租增值税专用发票需要开多张,单位和数量如何填写
  • win8系统怎么清理缓存
  • win8怎么升级到win10 bios设置
  • ubuntu开启图形化界面
  • mac系统怎么创建文件
  • linux的压缩包
  • windows远程桌面连接怎么用
  • 苹果Mac系统怎么安装
  • linux程序死机
  • windows xp
  • win7安装补丁慢的原因
  • 联想笔记本出厂编号
  • 文本框css关闭输入框
  • Python3.6正式版新特性预览
  • javascript运用
  • javascript语言基础
  • js类的静态属性
  • string和stringbuffer创建后都可以修改
  • 村财审计报告怎么写
  • 下抓两级抓深一层的工作机制的要求包括什么
  • 北京地方税务局李宗定
  • 大管家多少集
  • 海宁到许村公交车路线
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设