前端祖传三件套JavaScript的函数之call()方法/apply()方法

简介: 在JavaScript中,函数是一种非常重要的语言特性,可以帮助我们实现各种功能。 Function.prototype上提供了两个函数 call() 和 apply(),它们允许您在调用函数时指定this的值,以及传递参数。本文将介绍这两个方法的用法、区别和注意事项。


一、call() 方法

  1. 语法:
function.call(thisArg, arg1, arg2, ...)

其中,thisArg 是一个对象,arg1、arg2 等是函数的实际参数。

  1. 作用:

call() 方法允许您在调用函数时设置函数内部 this 的值,并且可以将多个参数传递给函数。

  1. 示例:
const person = {
  name: 'Jack',
  age: 18,
  sayHello: function (message) {
    console.log(message + ', I am ' + this.name + ', ' + this.age + ' years old.');
  }
};
person.sayHello('Hi'); // 输出: Hi, I am Jack, 18 years old.
const anotherPerson = {
  name: 'John',
  age: 20
}
person.sayHello.call(anotherPerson, 'Hello'); // 输出: Hello, I am John, 20 years old.

二、apply() 方法

  1. 语法:
function.apply(thisArg, [argsArray])

其中,thisArg 是一个对象,argsArray 是一个包含函数参数的数组或类数组对象。

  1. 作用:

apply() 方法也允许您在调用函数时设置函数内部的 this 值,并且可以将多个参数传递给函数。与 call() 方法不同的是,apply() 方法接受参数的方式是数组或类数组对象。

  1. 示例:
const person = {
  name: 'Jack',
  age: 18,
  sayHello: function (message, country) {
    console.log(message + ', I am ' + this.name + ', ' + this.age + ' years old. I come from ' + country);
  }
};
person.sayHello('Hi', 'China'); // 输出: Hi, I am Jack, 18 years old. I come from China.
const anotherPerson = {
  name: 'John',
  age: 20
}
person.sayHello.apply(anotherPerson, ['Hello', 'USA']); // 输出: Hello, I am John, 20 years old. I come from USA.

三、call() 和 apply() 的区别

最主要的区别在于参数传递的方式不同,call() 方法是按照参数列表传递的,而 apply() 方法是通过数组或类数组对象传递的。

例如:

let arr = [1, 2, 3];
let max = Math.max.call(null, ...arr);
let min = Math.min.apply(null, arr);

四、注意事项

  1. 在使用 call() 或 apply() 方法时,如果第一个参数为 null 或 undefined,那么它们会被替换为全局对象 window。
  2. 在使用 call() 或 apply() 方法时,如果第一个参数是一个基本类型,那么 JavaScript 会在内部将其转换为对应的对象类型。

五、总结

JavaScript 中的 call() 和 apply() 方法是非常实用的语言特性,可以帮助您更好地编写代码,并且提高程序的灵活性和可维护性。在实际工作中,需要仔细考虑函数调用的方式和参数传递的方法,以确保程序的正确性和性能。

目录
相关文章
|
18天前
|
前端开发 JavaScript 网络协议
前端最常见的JS面试题大全
【4月更文挑战第3天】前端最常见的JS面试题大全
35 5
|
19天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
19天前
|
JavaScript
常见函数的4种类型(js的问题)
常见函数的4种类型(js的问题)
11 0
|
20天前
|
JavaScript
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
9 0
|
6天前
|
缓存 JavaScript 前端开发
js的入口函数,入口函数的作用
js的入口函数,入口函数的作用
12 4
|
20天前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
|
JavaScript 前端开发 数据安全/隐私保护
|
JavaScript 前端开发 数据安全/隐私保护
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
72 0