Js中的call()方法和apply()方法

Js中的apply和call的用法以及二者之间的区别:
在牛客网上看到这样一道题:

题目描述

将数组 arr 中的元素作为调用函数 fn 的参数 示例1 输入

function (greeting, name, punctuation)
 {return greeting + ', ' + name + (punctuation || '!');}, ['Hello', 'Ellie', '!']

输出 Hello, Ellie
运行答案为:function argsAsArray(fn, arr) { return fn.apply(this,arr); }

参考自:添加链接描述
这里详细的介绍一下两者之间的区别:

相同点:

  1. apply和call都能继承另外一个对象的属性和方法;
  2. Function.apply(obj,args);方法能接受两个参数;
  3. 其中,obj指的是代替Function类里的this对象;args:这个是数组,它将作为参数传递给Function;

不同点:

  1. call和apply的意思一样,只不过参数列表不一样;
  2. Function.call(obj,[param1[,param2[,…[,paramN]]]]),
  3. obj:这个对象将代表Function类里的this对象;
  4. params:指的是一个参数列表。

参考代码:Student对象继承Person对象的name和age属性,分别使用Apply方法和Call方法,代码如下:




    
    Js中的call和apply


 


二者的使用场景:

  1. apply:在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型;
  2. call:如果Person的参数列表是(age,name),而Student的参数列表是(name,age,grade),这时就可以用call来实现,也就是直接指定了参数列表对应值的位置(Person.call(this,age,name,grade)
    总结:我觉得两者都是为了继承另外一个对象的属性和方法,比如上面的代码,我们就是为了让Student对象继承Person对象的name和age属性。

你可能感兴趣的:(Js中的call()方法和apply()方法)