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配置