资讯专栏INFORMATION COLUMN

apply与call方法

SHERlocked93 / 2768人阅读

摘要:调用了方法,参数是通过将数组转换为参数列表的集合通常在什么情况下,可以使用类似等之类的特殊用法一般在目标函数只需要个参数列表,而不接收一个数组的形式,可以通过的方式巧妙地解决这个问题。

apply与call可以改变函数内部this的指向
apply是函数对象本身身上的方法,可直接用
call也可以调用函数

function sum (a, b, c, d){
    console.lo(a+b+c+d);
    console.log(this === obj)
}

var obj = {
    name: "xiaoming",
    age: 18,
    sex: "男"
}
sum(1,2,3,4);  

毫无疑问,thid===obj肯定是false,因为调用函数sum是window,所以this是window,不等于obj

但是如果这样子调用sum.call(obj,1,2,3,4);
this就是指向obj

为什么要用call呢?
因为它的参数除了接收实际参数外,还可以接收一个参数代表this
它的第一个参数就是你希望函数里面的this是谁,后面的才是实参

而apply的基本功能和call基本功能是一样的,区别在于传递参数的语法不一样
实参是需要拿数组包住
sum.apply(obj,[1,2,3,4]);

apply的一些巧妙用法

1)Math.max 可以实现得到数组中最大的一项:
因为Math.max不支持Math.max([param1,param2])也就是数组,但是它支持Math.max(param1,param2...),所以可以根据apply的特点来解决 var max=Math.max.apply(null,array),这样就轻易的可以得到一个数组中的最大项(apply会将一个数组转换为一个参数接一个参数的方式传递给方法)
这块在调用的时候第一个参数给了null,这是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,所以直接传递了一个null过去。
用这种方法也可以实现得到数组中的最小项:Math.min.apply(null,array)

(2)
Array.prototype.push可以实现两个数组的合并
同样push方法没有提供push一个数组,但是它提供了push(param1,param2...paramN),同样也可以用apply来转换一下这个数组,即:
var arr1=new Array("1","2","3");
var arr2=new Array("4","5","6");
Array.prototype.push.apply(arr1,arr2); //得到合并后数组的长度
因为push就是返回一个数组的长度,也可以这样理解。arr1调用了push方法,参数是通过apply将数组转换为参数列表的集合
通常在什么情况下,可以使用apply类似Math.max等之类的特殊用法:
一般在目标函数只需要n个参数列表,而不接收一个数组的形式,可以通过apply的方式巧妙地解决这个问题。

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

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

相关文章

  • apply call 详细深入理解

    apply 与 call 介绍 function f1(x, y) { console.log(结果是: + (x + y) + this); } f1(10, 20); //函数的调用 // 结果是:30[object Window] // 此时的 f1 实际上是当作对象来使用的,对象可以调用方法 f1.apply(); // 结果是:NaN[object Window] f1.ca...

    Hegel_Gu 评论0 收藏0
  • 深入浅出JavaScript之call()、apply()方法

    摘要:的作用在中,方法和方法都是为了改变函数运行时上下文而存在的,换句话说就是为了改变函数体内部的指向。欢迎前端大牛纠正错误,如有错误我会及时改正。 写在前面: 隔了很长时间了,也不知道写点什么。最近一直在研究ES6,一直想写出来的文章能对初学者或者是在学习JS路上有所帮助的。这就是我的初衷。 call、apply的作用 在JavaScript中,call()方法和apply()方法都是为了...

    Cympros 评论0 收藏0
  • 「干货」细说 callapply 以及 bind 的区别和用法

    摘要:的调用者,将会指向这个对象。此外,还可以扩展自己的其他方法。的使用最后来说说。不同的是,方法的返回值是函数,并且需要稍后调用,才会执行。而和则是立即调用。总结和的主要作用,是改变对象的执行上下文,并且是立即执行的。 前言 上一篇文章 《「前端面试题系列4」this 的原理以及用法》 中,提到了 call 和 apply。 它们最主要的作用,是改变 this 的指向。在平时的工作中,除了...

    GraphQuery 评论0 收藏0
  • 【JavaScript】callapply兄弟列传

    摘要:具体可参考下面代码定义到原型链上的方法这里没有继承父类中的方法张三张三太史公曰总结一下与兄弟俩的任务使用一个指定的值和若干个指定的参数值的前提下调用某个函数或方法。本篇人物小传自此结束。 在JavaScript中,有这么俩货,一个叫call,一个叫apply,它们俩工作几乎一毛一样,但是也有所区别,曾经对这个知识点非常困惑,看过几篇博客也没搞清楚这哥俩到底打算要干个啥,直到某天仔细研究...

    tuniutech 评论0 收藏0
  • js 面试官想了解你有多理解call,apply,bind?

    摘要:返回值这段在下方应用中有详细的示例解析。回调函数丢失的解决方案绑定回调函数的指向这是典型的应用场景绑定指向,用做回调函数。 showImg(https://segmentfault.com/img/remote/1460000019971331?w=1024&h=680); 函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this...

    wuaiqiu 评论0 收藏0
  • 回味JS基础:call apply bind

    摘要:使用方法调用匿名函数在下例中的循环体内,我们创建了一个匿名函数,然后通过调用该函数的方法,将每个数组元素作为指定的值执行了那个匿名函数。这个匿名函数的主要目的是给每个数组元素对象添加一个方法,这个方法可以打印出各元素在数组中的正确索引号。 原文:回味JS基础:call apply 与 bind 在JavaScript中,call、apply和bind是Function对象自带的三个方法...

    plokmju88 评论0 收藏0

发表评论

0条评论

SHERlocked93

|高级讲师

TA的文章

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