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)

输出:
1240

在函数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方法)

转载于:https://www.cnblogs.com/gaarahan/p/9417623.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值