改变this指向之call、appay 和 bind

在JavaScript中,callapplybind都是用来改变函数的执行上下文(即函数中的this关键字所指向的对象)的方法。

call、appay 和 bind 基本使用

  • call方法:call方法接收多个参数,第一个参数是要绑定给函数的对象,后续参数是传递给函数的参数。call方法会立即执行函数。
function greet(name) {
  console.log(`Hello, ${name}! I am ${this.age} years old.`);
}

const person = {
  age: 25
};

greet.call(person, 'John'); // Output: Hello, John! I am 25 years old.
  • apply方法:apply方法与call方法类似,但是接收的参数是以数组的形式传递的。apply方法也会立即执行函数。
function greet(name) {
  console.log(`Hello, ${name}! I am ${this.age} years old.`);
}

const person = {
  age: 25
};

greet.apply(person, ['John']); // Output: Hello, John! I am 25 years old.
  • bind方法:bind方法接收一个参数,即要绑定给函数的对象,返回一个新的函数。该函数可以被稍后调用,以后调用时函数的执行上下文仍然是绑定给它的对象。
function greet(name) {
  console.log(`Hello, ${name}! I am ${this.age} years old.`);
}

const person = {
  age: 25
};

const greetPerson = greet.bind(person);
greetPerson('John'); // Output: Hello, John! I am 25 years old.

call、appay 和 bind 三者之间的区别

callapplybind都是JavaScript中用于改变函数执行上下文(即this的指向)的方法。以下是它们之间的主要区别:

  1. 执行方式:

    • callapply在改变this指向后会立即执行函数。
    • bind会创建一个新的函数,当这个新函数被调用时,bind的第一个参数将作为它运行时的this,之后的一序列参数将会在传递的实参前传入作为它的参数。即bind返回一个新的函数,不会立即执行,而是等待被调用时才执行。
  2. 参数传递:

    • callbind接收的参数是逐个列出的,即它们接收的是参数列表。例如:
      func.call(obj, arg1, arg2, arg3)
      // 或
      func.bind(obj, arg1, arg2, arg3)
    • apply接收的第二个参数是一个数组或类数组对象,其中的数组元素将作为单独的参数传给func函数。例如:
      func.apply(obj, [arg1, arg2, arg3])

总结:

  • callapply方法会立即执行函数,并且可以传递多个参数;
  • call方法接收的是一系列参数,apply方法接收的是一个数组作为参数;
  • bind方法会返回一个新的函数,不会立即执行,可以稍后调用。

总结来说,callapplybind的主要区别在于它们的执行方式和参数传递方式。它们都是用来动态地设置函数执行时的this值,但callapply会立即执行函数,而bind会创建一个新的函数,等待后续调用。在参数传递上,callbind接收参数列表,而apply接收一个参数数组。

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农键盘上的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值