Function.prototype.call

本文主要是个人对call()方法的一点理解


函数原型

myFunc.call(thisArg, arg1, arg2, ...)

参数理解

call方法与传统的传参调用不同的是,call不只指定函数的参数(arg1,arg2...),还指定了函数在运行时的this指向(thisArg)

这是一个能帮助理解this指向的例子 :

"use strict";
function Product(name, price) {
  this.name = name;
  this.price = price;**函数说明**
>**可以让call()中的对象(thisArg)调用当前对象所拥有的function(myFunc)**
}

function Food(name, price) {
  Product.call(this, name, price);
  console.log(this.name)
}

Food('cheese', 5)

输出:

在函数Food中,我们并没有为其this赋值,却能够输出this的值,这是因为,我们使用了call(),将Food中的this传给了Product函数,并且为其进行了赋值

我们可以将上面代码理解成下面这样,虽然不能运行,但能帮助我们理解上面代码的传参过程:

"use strict";
function Product(foodThis,name, price) {
  foodThis.name = name;
  foodThis.price = price;
}

function Food(name, price) {
  Product(this, name, price);
  console.log(this.name)
}

Food('cheese', 5)

作用理解

可以让call()中的对象(thisArg)调用当前对象所拥有的function(myFunc)

假如对象A有方法func(arg1,arg2),而对象B没有,此时我们便可以借助call函数来完成B对象调用A对象方法的过程,而不用为B对象再写一个func()

A.func.call(B,arg1,arg2)

此时call函数的作用可以这样描述 :

  • 通过call函数,让call中的对象B调用了当前对象A所拥有的方法func()

关于call的另一些例子可以在个人的这篇文章找到
类数组元素如何作为数组使用 ---(call方法)

你可能感兴趣的:(Function.prototype.call)