侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 49 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

JavaScript中的bind、call、apply

LouisFonda
2024-05-30 / 0 评论 / 0 点赞 / 9 阅读 / 0 字 / 正在检测是否收录...

JavaScript中的bind、call、apply

bind、apply和call是JavaScript中用于改变函数执行上下文的方法。

  • bind: bind 方法创建一个新的函数,并将指定的对象绑定为函数执行时的上下文(即 this 值)。它不会立即执行函数,而是返回一个新的函数,可以稍后调用。bind 方法还允许传递参数给函数,并在调用时将它们传递给原始函数。

  • apply: apply 方法立即调用函数,并将指定的对象绑定为函数执行时的上下文。它与 call 方法类似,但是参数是以数组形式传递给函数。这意味着可以将一个数组作为参数传递给函数,而不需要将数组解构为独立的参数。

  • call: call 方法也立即调用函数,并将指定的对象绑定为函数执行时的上下文。它与 apply 方法相似,但是参数是作为独立的参数传递给函数,而不是作为数组。这使得它更适合于接受多个单独参数的函数。

1. 将伪数组转换为真数组

有时我们会遇到类似于 DOM 操作返回的 NodeList 或函数参数 arguments 这样的伪数组,可以使用 Array.prototype.slice 结合 call 或 apply 来将其转换为真正的数组:

function sum() {
    const args = Array.prototype.slice.call(arguments);
    return args.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4, 5)); // 输出: 15

2.找出数组中的最大值或最小值

const numbers = [5, 3, 8, 1, 6];

const maxNum = Math.max.apply(null, numbers);
console.log(maxNum); // 输出: 8

const minNum = Math.min.call(null, ...numbers);
console.log(minNum); // 输出: 1

3. 实现函数的继承

可以使用 call 或 apply 来实现函数的继承,让一个对象继承另一个对象的方法:

function Animal(name) {
    this.name = name;
}

function Dog(name, breed) {
    Animal.call(this, name);
    this.breed = breed;
}

const myDog = new Dog('Buddy', 'Labrador');
console.log(myDog.name); // 输出: Buddy
console.log(myDog.breed); // 输出: Labrador
0

评论区