位置: 编程技术 - 正文

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)

  • 电子税务局附加税带不出来
  • 固定资产计提折旧计入什么科目
  • 进项税发票认证期限多长时间
  • 实收资本实缴需要什么手续
  • 无形资产摊销和累计摊销一样吗
  • 政府会计制度固定资产折旧哪个月开始计提
  • 差额事业单位的工资是由财政开支吗
  • 出口退税申报流程视频
  • 企业要怎样才能发挥其在实现生态产品价值过程中的作用
  • 借贷记账法要求对某一笔经济业务在两个账户
  • 从原材料到库存商品的生产核算过程
  • 晚会主持人化妆
  • 食堂固定资产折旧年限
  • 契税计税依据是否包含耕地占用税
  • 劳务派遣差额征税5%
  • 三类小规模纳税标准
  • 蔬菜销售收入免增值税吗
  • 防伪税控服务费减免文件
  • 货代免税是否需要每年备案
  • 工厂生产的配件怎么入账
  • 企业净资产增长率上升说明什么
  • 折旧率通俗理解
  • 打开网页出现电脑标志
  • 盘盈的固定资产怎么做账务处理
  • 如何使用定向流量
  • PHP:Memcached::resetServerList()的用法_Memcached类
  • PHP:php_check_syntax()的用法_misc函数
  • apache是什么文件
  • 新企业会计准则是哪一年颁布的
  • 技术人员工资属于什么费用
  • 以前年度损益在报表哪里体现
  • php用img显示图片
  • php session_id
  • 做毕业设计,前景如何
  • 关基系统防SSL证书断供,知道创宇“包办式”国密改造方案省心又安全
  • 个税申报可以作废重新申报吗
  • 营改增分录
  • 什么叫做印花??
  • 销货清单要放凭证里吗
  • 公司股东的权利和义务有哪些
  • mongodb重置密码
  • 交加盟费送赠品可以吗
  • 一般纳税人认定书是什么样子
  • 对公账户转到个体工商户
  • 小规模纳税人结转增值税的账务处理
  • 当月发票是否需要当月支付
  • 收到商业汇票怎么入账
  • 盈利能力分析对企业发展的意义
  • 农产品怎么自产自销
  • 折扣销售方式销售货物只要发票中有注明的折扣额
  • 企业对外借款是什么意思
  • 预算凭证是什么
  • 企业的融资租赁
  • 固定资产一次性扣除申报表怎么填
  • 纳税人购进国内商品
  • 投资款没有进入公司账户算投资款吗
  • 计入当期损益是不是计入三大期间费用
  • mysql数据库查看是否区分大小写
  • 安装sqlserver2000 IP地址出错怎样修改
  • 第一次安装ps后需要哪些设置
  • linux防火墙命令大全
  • linux虚拟机怎么查看目录
  • win1020h2版好不好
  • xp磁盘空间不足怎么办
  • 深入剖析kubernetes pdf
  • jqueryvalidate验证
  • Unity3d中EventTrigger的封装
  • Javascript Throttle & Debounce应用介绍
  • Python使用QQ邮箱发送Email的方法实例
  • javascript的主要内容
  • python操作word文档替换文字
  • jquery选择父级元素
  • python复制sheet
  • 税务局属于什么行业类别
  • 税控盘服务费必须每年交吗为什么
  • 个体诊所可以申请医保报销吗
  • 地税局下属单位
  • 公司完税证明去哪里开具
  • 车辆购置印花税需入固定资产吗
  • 绍兴柯桥有哪些村
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设