JavaScript call和apply的区别是什么
JavaScript call()方法 : 调用方法时,将拥有者对象作为参数传入。关键字 this 指的是函数的‘拥有者’或所属对象。我们可以调用可用于不同对象的方法。
语法:
object.objectMethod.call( objectInstance, arguments )
JavaScript apply() 方法 : apply() 方法用于编写可以在不同对象上使用的方法。它与函数 call() 不同,因为它接受一个数组作为参数。
语法:
object.objectMethod.apply(objectInstance, arrayOfArguments)
call()方法和apply()方法之间的区别: 唯一的区别是, call() 方法通过逗号分隔参数,而 apply() 方法通过参数数组。
示例1: 这个示例使用call()方法调用一个函数。
<body style="text-align:center;">
<h1 style="color:green;">
GeeksForGeeks
</h1>
<h3>call() method</h3>
<button onClick="fun()">
click
</button>
<p id="GFG"></p>
<!-- Script to use call() method to call
function -->
<script>
function fun() {
let p = {
fullName: function(addr1, addr2) {
return this.fName + " " + this.lName
+ ", " + addr1 + ", " + addr2;
}
}
let p1 = {
fName:"GFGfName",
lName: "GFGlName",
}
let x = p.fullName.call(p1, "India", "USA");
document.getElementById("GFG").innerHTML = x;
}
</script>
</body>
输出:

示例2: 使用apply()方法完成相同的工作。
<body style="text-align:center;">
<h1 style="color:green;">
GeeksForGeeks
</h1>
<h3>JavaScript apply() method</h3>
<button onClick="fun()">
click
</button>
<p id="GFG"></p>
<script>
function fun() {
let p = {
fullName: function(addr1, addr2) {
return this.fName + " " + this.lName
+ ", " + addr1 + ", " + addr2;
}
}
let p1 = {
fName:"GFGfName",
lName: "GFGlName",
}
let x = p.fullName.apply(p1, ["India", "USA"]);
document.getElementById("GFG").innerHTML = x;
}
</script>
</body>
输出:

让我们用表格形式理解差异 -:
| JavaScript call() 方法 | JavaScript apply() 方法 |
|---|---|
| 用于编写可用于不同对象的方法。 | 用于编写可用于不同对象的方法。 |
| JavaScript 中的预定义方法。 | 其返回值是调用函数时提供的 this 值和参数的结果。 |
| 用于使对象使用属于不同对象的方法。 | 我们可以使用该函数的列表而不是数组。 |
| 该方法还可以接受参数。 | 该方法将参数作为数组传递。 |
极客教程