JavaScript Function.prototype.apply和Function.prototype.call的区别
JavaScript将所有东西都视为对象,包括函数,每个对象都有自己的属性和方法。函数对象在其上有apply()和call()两个方法。然而,在JavaScript中这两个函数存在混淆。它们的主要区别在于它们如何处理函数参数。在传递给被调用函数的参数方面,这两个函数没有任何区别,但是函数内部的定义不同。
除了第一个参数外,apply()方法还需要一个数组作为其第二个参数。目标方法的参数以数组形式表示。
JavaScript call()函数: 它使用给定的参数和值来调用一个函数。
语法:
function.call(object, arg1, arg2)
示例:
Javascript
let obj = {
fname: "geeks",
mname: "for",
lname: "geeks",
};
let display = function (str1, str2) {
console.log(`{str1}{str2} ${this.fname +
this.mname + this.lname}`);
};
display.call(obj, "Welcome", "to");
输出:
Welcome to geeksforgeeks
JavaScript apply() 函数: 这个方法用来引用数组或数组对象作为参数和值调用一个函数。
无论在哪种情况下,第一个参数都将是代表‘this’的对象引用,这个对象引用在被调用的函数内部。因此,call() 与apply() 是不同的。都可以应用到一个函数,这个函数在第一个参数的上下文中运行。在call() 中,剩余的参数将会原样传入函数,然而在apply() 中,第二个参数将会被作为数组来传入,然后被调用的函数将会将其解压为参数传入。
语法:
function.apply(object, [arg1, arg2])
示例:
Javascript
let obj = {
fname: "geeks",
mname: "for",
lname: "geeks",
};
let display = function (str1, str2) {
console.log(`{str1}{str2} ${this.fname +
this.mname + this.lname}`);
};
display.apply(obj, ["Welcome", "to"]);
输出:
Welcome to geeksforgeeks
Function.prototype.apply和Function.prototype.call的区别:
Function.prototype.apply() | Function.prototype.call() |
---|---|
使用apply()方法,可以调用函数,并指定一个值和以数组(或对象)形式提供的参数。 | 使用call(),函数通过给定的值和参数进行调用。 |
function.call(object, arg1, arg2) | function.apply(object, [arg1, arg2]) |