本文主要是个人对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方法)
网友评论