js基础学习 —— call、apply、bind

call、apply、bind 都是函数对象的方法,并且都会改变this指向


1、call() 和 apply() 会立即调用函数执行;bind() 不会立即执行
2、3个方法 都可以将 一个对象 作为 第一个参数传递,并且函数 this 的指向会指向传递的对象
3、使用 3个方法 传递的 第一个对象为隐含参数,不会作为函数形参
4、函数接收的参数,是 第一个对象之后的 依次传递的参数


1、call(对象,参数1,参数2,…,参数n)

function fun(a, b) {
    console.log(this, a, b)
}
let obj1 = { a: 1 }
fun.call(obj1, 1, 1); 

在这里插入图片描述

this 指向了传递的对象 obj1,对象后的参数 依次成为 函数的 实参


2、apply(对象,[参数1,参数2,…,参数n])

function fun(a, b) {
    console.log(this, a, b)
}
let obj2 = { b: 2 }
fun.apply(obj2, [2, 2]);

在这里插入图片描述

this 也同样指向了传递的对象 obj2,对象后的参数 必须是 数组函数依次接收数组为参数


3、bind(对象,参数1,参数2,…,参数n)

function fun(a, b) {
    console.log(this, a, b)
}
let obj3 = { c: 3 }
let bind = fun.bind(obj3, 3, 3);// 返回方法,等待执行
bind();// 调用返回方法

在这里插入图片描述
this 也同样指向了传递的对象 obj3,对象后的参数 依次成为 函数的 实参
但是 bind() 不是立即执行的,它会返回一个方法,调用返回方法,才能立即执行



区别:

call(对象,参数1,参数2,…,参数n):

  • 立即执行,更改this指向;参数无限,依次传递

apply(对象,[参数1,参数2,…,参数n]):

  • 立即执行,更改this指向;对象之后,只有一个参数,参数必须已数组封装

bind(对象,参数1,参数2,…,参数n):

  • 等待执行,返回一个方法,调用方法执行;更改this指向;参数无限,依次传递
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值