当前位置:首页 > 日记 > 正文

javascript中apply/call和bind的使用

javascript中apply/call和bind的使用

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绑定到调用对象。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

相关文章

ppt2013导出视频失败怎么处理

ppt2013导出视频失败怎么处理

步骤,视频,怎么处理,电脑软件,  ppt2013增加了导出视频功能,使ppt更加的完善。他如何到处成为视频格式呢?其实方法不难,现在小编马上给大家演示一下PPT2013导出视频的步骤,希望看完本教程的朋友都能学会并运用起来。PPT2013导出视频的步骤首…

word文档中文件怎么插入gif动图

word文档中文件怎么插入gif动图

文件,文档,电脑软件,图文,word,  如果word文件中想要插入动图,并让动图动起来,那么就需要了解一下制作插入动图的操作步骤了。以下是小编为您带来的关于word文档中文件插入gif动图,希望对您有所帮助。word文档中文件插入gif动图1、首先启动w…

正则表达式i修饰符 | 大小写不敏感

正则表达式i修饰符 | 大小写不敏感

修饰符,大小写不敏感,正则表达式,电脑软件,正则表达式i修饰符:i修饰符用来规定正则表达式的匹配是大小写不敏感的。语法结构:构造函数方式:new RegExp("regexp","i")对象直接量方式:/regexp/i浏览器支持:IE浏览器支持此元字符。火狐浏…

ppt2010怎么删除的背景ppt2010删除

ppt2010怎么删除的背景ppt2010删除

删除,方法,步骤,背景,图片,  在制作幻灯片的时候有些图片我们并不想要背景,那如何删除图片的背景呢?具体怎么做下面小编来告诉你ppt2010怎么删除图片的背景。希望对你有帮助!ppt2010删除图片的背景的步骤打开ppt目录栏中的插入—&mdas…

详解vue渲染从后台获取的json数据

详解vue渲染从后台获取的json数据

数据,后台,详解,电脑软件,vue,?公司项目原来用的框架扩展性太差,准备更新前台页面然后用vue渲染dom然后我写了一个demo$(document).ready(function(){ $.ajax({ type:"post", url:"", async:true, data:{ }, da…

JavaScript代码执行的先后顺序问题

JavaScript代码执行的先后顺序问题

执行,顺序,代码,电脑软件,JavaScript,一、js--->单线程   严格意义上来说,javascript没有多线程的概念,所有的程序都是单线程依次执行的。1、什么是单线程?通俗点说,就是代码在执行过程中,另一段代码想要执行就必须等当前代码执行完成后才可以…

在word中怎样输入化学方程式 word

在word中怎样输入化学方程式 word

输入,方法,步骤,化学方程式,电脑软件,  化学方程式的书写不管是学生还是老师都是一个绕不开的工作。化学方程式中有很多的上下标格式、括号,这给我们老师录入化学方程式到文档中带来了不小的困难,如何快速的录入化学方程式是我们亟需解决的…

angularjs实现上拉加载和下拉刷新

angularjs实现上拉加载和下拉刷新

上拉加载,刷新数据,功能,电脑软件,angularjs,虽说AngularJS 1.x版本中对于上拉加载,下拉刷新数据功能都有做些封装,但还是有些人不清楚。其实我一开始也是不懂的,so.现在把搞懂的记录下免得少走弯路。 now,begin:先说下拉刷新吧,原理就是每次下…

js实现楼层导航功能

js实现楼层导航功能

导航,楼层,功能,电脑软件,js,图如下所示:1.点击跳转到相应区域:页面scroll掉的距离 = 目标板块在文档中的垂直坐标 - 起始板块(目标位置)到视图顶部的距离;document.body.scrollTop = scrollLength;   document.documentElement.scrollTop = s…

ps怎样把人物制作成漫天飞舞的雪景

ps怎样把人物制作成漫天飞舞的雪景

雪景,效果,人物,电脑软件,ps,ps怎样把图片制作成漫天飞舞的雪景效果?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。最终效果图练习素材:具体步骤:1、将RAW格式的原文件在PS里打开,参数调整如下。2、打开…

excel2010开启夜间模式的方法步骤

excel2010开启夜间模式的方法步骤

方法,夜间模式,步骤,分析工具,加载,  夜间如果输入表格,太亮的话,对眼睛不好,开启夜间模式能够相对应的保护我们的眼睛。下面小编教你excel2010怎么开启夜间模式,希望对你有帮助!excel2010开启夜间模式的方法首先,我们打开excel表格,打开以后,我…

RedHat Linux 红旗9.0安装图解

RedHat Linux 红旗9.0安装图解

安装图解,红旗,电脑软件,RedHat,Linux,第1步:第一步:选择安装方式。 1、图形安装(直接回车) 2、文本安装(输入 linux text第2步:选择“OK”为检查光盘 选择“Skip"跳过检查。我确认我的光盘是好的,我跳过!第3步:这一段是费话,跳过!4步…