资讯专栏INFORMATION COLUMN

call,apply,bind

Dongjie_Liu / 662人阅读

摘要:介绍的一大特点是,函数存在定义时上下文和运行时上下文以及上下文是可以改变的这样的概念,都是为了改变函数运行时上下文存在的,既改变函数体内部的指向。更改函数的并返回新函数,可以传参。在函数运行时使用的值。

1.介绍

javascript的一大特点是,函数存在[定义时上下文]和[运行时上下文],以及[上下文是可以改变的]这样的概念,apply,call 都是为了改变函数运行时上下文(context)存在的,既改变函数体内部 this 的指向。bind更改函数的this并返回新函数,可以传参。

Function.prototype.apply()

Function.prototype.call()

Function.prototype.bind()
2. apply
语法
func.apply(thisArg,[argsArray])
描述

在调用一个存在的函数时候,你可以为其指定一个 this 对象,this 指当前对象,也就是正在调用这个函数的对象。使用apply , 你可以只写一次这个方法,然后在另外一个对象中继承它,而不是用在新对象中重复写该方法。

参数

thisArg :可选的。在函数func运行时使用this的值。注意,this可能不是该方法看到的实际的值:如果这个函数在 非严格模式 下,则指定为 null 或 undefined 时,会自动替换为指向 全局对象原始值会被包装

argsArray : 可选的。一个数组类数组 对象,其中的数组元素将作为多带带的的参数传给 func 函数,如果改参数的值为 null 或者 undefined,则表示不需要传入任何参数。

案列

1.用apply将数组添加到了一个数组

var arr1 = [1,2]
arr1.push(3);
arr1.push(4,5);  
console.log(arr1)  // [1,2,3,4,5]
var arr2 = [6,7,8]
arr1.push(arr2);
console.log(arr1) // [1, 2, 3, 4, 5, Array(3)]

我们可以使用push 将元素追加到数组中。并且,因为push接受可变数量的参数,我们也可以 一次推送多个元素。但是,如果我们传递一个数组来推送,它实际上会将该数组作为单个元素添加,而不是多带带添加元素,因此我们得到的是一个数组内的数组。

var arr1 = [1,2,3];
var arr2 = [2,3,4];
var arr3 = arr1.concat(arr2);
console.log(arr3); // [1,2,3,2,3,4]

concat 确实具有我们想要的效果,但它并不是附加到现有数组,而是创建并返回一个新数组,但是我们想要附加到我们现有的阵列...那么现在呢?写一个循环?当然不是,我们可以利用apply 实现。

var array = ["a","b"];
var element = [0,1,2];
array.push.apply(array,element);
console.log(array);  // ["a","b",0,1,2]

2.使用apply和内置函数
聪明的apply用法允许你在某些本来需要写成遍历数组变量的任务中使用内建的函数。如下面的 利用Math.max/Maxt.min 求一个数组中的最大/最小值。

var number = [5,6,2,3,7];
var max = Math.max.apply(null,number)  
var min = Math.min.apply(null,number)
基本等同于
Math.max(number[0],number[1],...) 或 Math.max(5,6,...)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105735.html

相关文章

  • 前端基础:call,apply,bind的的理解

    摘要:和区别其实他们的作用是一样的,只是传递的参数不一样而已。接受个参数,第一个参数指定了函数体内对象的指向,第二个参数为数组或者一个类数组。看个栗子一个有意思的事在中,多次是无效的。而则会立即执行函数。 背景 前两天在做小程序的需求的时候用到bind的时候才想起自己对这三的东西的了解比较浅薄,这个时候用的时候就有点怕。时候还是要好好学习下,理解下怎么玩。 正文 先说call 和 apply...

    netmou 评论0 收藏0
  • JS中的callapplybind方法详解

    摘要:不能应用下的等方法。首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...

    zombieda 评论0 收藏0
  • JS基础篇--callapplybind方法详解

    摘要:首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。而则会立即执行函数。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...

    lastSeries 评论0 收藏0
  • this总结【2】—— call/applybind

    摘要:和概览我们要将归为一类,单独归为一类三者的共同点是都可以指定和都是绑定在的原型上的,所以的实例都可以调用这三个方法至于为什么,看完这篇文章你就懂了如果你不懂什么是实例的话,请移步深入浅出面向对象和原型概念篇深入浅出面向对象和原型概念篇第一个 1.call/apply和bind概览 我们要将call/apply归为一类,bind单独归为一类 三者的共同点是都可以指定this call/...

    wudengzan 评论0 收藏0
  • 理解JavaScript中的call,applybind方法

    摘要:输出的作用与和一样,都是可以改变函数运行时上下文,区别是和在调用函数之后会立即执行,而方法调用并改变函数运行时上下文后,返回一个新的函数,供我们需要时再调用。 前言 js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改变函数运行时上下文,最终的返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。这几个方法...

    chaosx110 评论0 收藏0
  • javascript关于this 以及this的显示设置(applycallbind)

    摘要:如果连续呢结果会是什么结果还是第一个原因是,在中,多次是无效的。更深层次的原因,的实现,相当于使用函数在内部包了一个,第二次相当于再包住第一次故第二次以后的是无法生效的。 this 1.其实js中的this没那么难理解,当找不到this时记住一句话:谁调我,我就指谁!new 谁指谁 function text1(){ console.log(this); //指wind...

    LiveVideoStack 评论0 收藏0

发表评论

0条评论

Dongjie_Liu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<