javascript中apply/call和bind的使用
发布时间 - 2026-01-10 23:04:37 点击率:次fun.apply(context,[argsArray])

立即调用fun,同时将fun函数原来的this指向传入的新context对象,实现同一个方法在不同对象上重复使用。
context:传入的对象,替代fun函数原来的this;
argsArray:一个数组或者类数组对象,其中的数组参数会被展开作为单独的实参传给 fun 函数,需要注意参数的顺序。
fun.call(context,[arg1],[arg2],[…])
同apply,只是参数列表不同,call的参数需要分开一个一个传入。如果不知道参数个数,则使用apply。
使用:
Math.max()只接收单独的参数,通过下面的方法可以在数组上面使用max方法:
Math.max.apply(null, array);//会将array数组参数展开成单独的参数再传入 Array.prototype.push.apply(arr1,arr2);//将一个数组拆开push到另一个数组中;不用apply则会将后续数组参数当成一个元素push进去。 Array.prototype.slice.call(arguments);//在类素组对象上使用slice方法
fun.bind(context,[arg1],[arg2],[…])
使fun方法执行的context永不变。
arg1:要传递到新函数的参数列表
返回一个函数供后续调用,其函数体和原函数fun一样,但新函数的this指向新传入的context对象。新函数具有指定的初始参数,后续调用时的实参要往后面排。
var displayArgs = function (val1, val2, val3, val4) {
console.log(val1 + " " + val2 + " " + val3 + " " + val4);
}
var emptyObject = {};
// 生成新函数时指定了2个参数
var displayArgs2 = displayArgs.bind(emptyObject, 12, "a");
// 调用时传入另2个参数,往后排
displayArgs2("b", "c");
// Output: 12 a b c
使用bind()方法改写slice()方法:
var _Slice = Array.prototype.slice; var slice = Function.prototype.call.bind(_Slice); slice(…);
bind()兼容Ie5~ie8处理
if (!Function.prototype.bind) {
Function.prototype.bind = function(context) {
var self = this, // 即调用bind方法的目标函数
args = arguments;
return function() {
self.apply(context, Array.prototype.slice.call(args, 1));
}
}
}
一般情况下setTimeout()的this指向window或global对象。当使用类的方法时需要this指向类实例,就可以使用bind()将this绑定到调用对象。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# apply
# call
# bind
# 再谈JavaScript中bind、call、apply三个方法的区别与使用方式
# 使用JS简单实现apply、call和bind方法的实例代码
# JavaScript中的this/call/apply/bind的使用及区别
# 如何使用50行javaScript代码实现简单版的call
# 浅谈JavaScript中的apply/call/bind和this的使用
# Javascript中apply、call、bind的巧妙使用
# javascript中apply、call和bind的使用区别
# js apply/call/caller/callee/bind使用方法与区别分析
# 一文了解JavaScript中call/apply/bind的使用
# 会将
# 则会
# 绑定
# 需要注意
# 时将
# 到新
# 就可以
# 时需
# 组中
# 重复使用
# 一个函数
# Array
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在万网开始建站?分步指南解析
如何在万网自助建站中设置域名及备案?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Python自动化办公教程_ExcelWordPDF批量处理案例
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
如何在IIS服务器上快速部署高效网站?
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Python结构化数据采集_字段抽取解析【教程】
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Android Socket接口实现即时通讯实例代码
如何在万网自助建站平台快速创建网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何在云主机上快速搭建多站点网站?
北京的网站制作公司有哪些,哪个视频网站最好?
音响网站制作视频教程,隆霸音响官方网站?
如何选择可靠的免备案建站服务器?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何做网站制作流程,*游戏网站怎么搭建?
如何快速搭建二级域名独立网站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
linux写shell需要注意的问题(必看)
js实现获取鼠标当前的位置
如何在云指建站中生成FTP站点?
如何在腾讯云服务器快速搭建个人网站?
利用JavaScript实现拖拽改变元素大小
Laravel distinct去重查询_Laravel Eloquent去重方法
canvas 画布在主流浏览器中的尺寸限制详细介绍
bootstrap日历插件datetimepicker使用方法
Laravel如何使用Livewire构建动态组件?(入门代码)
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
详解Huffman编码算法之Java实现
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
网站制作企业,网站的banner和导航栏是指什么?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何在IIS7上新建站点并设置安全权限?
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
详解Android图表 MPAndroidChart折线图
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何快速生成橙子建站落地页链接?
Laravel观察者模式如何使用_Laravel Model Observer配置

