JS 中 call() 和 apply() 函数

创建时间:2019.02.21 修改时间:2019.03.24

JS 中函数也是对象,也有属性和方法。

call() 和 apply() 就是函数的两个方法。

call() 和 apply() 第一个参数作为函数中 this 的值,即使该参数不是一个对象。

call() 从第二个参数开始,均作为函数的参数。

<p id="demo1"></p>
<script>
function test(a, b) {
    return this + a * b;
}
var x = test.call(1, 2, 3);
document.getElementById("demo1").innerHTML = x;
</script>

返回:

apply() 的第二个参数是一个数组,数组中的元素作为函数的参数。

<p id="demo2"></p>
<script>
function test(a, b) {
    return this + a * b;
}
var arr = [2, 3];
var x = test.apply(1, arr);
document.getElementById("demo2").innerHTML = x;
</script>

返回:

call() 和 apply() 方法可以改变函数中 this 的值,无论这个函数是不是某个对象的方法,都可以让此函数作为指定对象的新方法调用,而不需要重写类。

<p id="demo3"></p>
<script>
var person1 = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}
var person2 = {
  firstName:"John",
  lastName: "Doe",
}
var x = person1.fullName.call(person2);
document.getElementById("demo3").innerHTML = x;
</script>

返回: