JavaScript中的call和apply以及bind方法的用法和用途

用法:

都是Function.prototype的方法,具有相同的作用:

                  修改this指向!!!

接收的第一个参数都是新的this指向对象,不同在于后续的参数:

不同点:

        1.call和apply会立即执行,bind会返回一个函数,需要进一步出发或者添加()立即触发

var a = 1
let obj = {
    a:2
}


function fun(){
    console.log(this.a)
}

fun() //this指向window对象,因此输出1

fun.call(obj) // 2
fun.apply(obj) // 2
fun.bind(obj)() //2,由于返回一个函数,需要添加()立即执行

        2.call和bind将剩余参数陈列出来,apply将剩余参数放入一个数组

function add(c,d){
    return this.a + this.b + c + d
}

let obj = { a:1 , b:3 }

add.call(obj,5,7)  //1+3+5+7 = 16

add.bind(obj,5,7)()  //1+3+5+7 = 16

add.apply(obj,[10,20]) //1+3+10+20 = 34

 用途:

        1.通常情况下可以用call直接完成任务

        2.当待使用的数据为数组时,考虑apply

        

let arr = [1,2,4,3]

// Math.max(1,2,4,3) //找出最大值4

//改变写法
Math.max.apply(null,arr) //将arr直接拿来用

        3.当为绑定事件修改this指向,等待下一个时机出发时

      

let btn = document.getElementById("btn")

let obj = {
    b:1
}

btn.onclick = function(){
    console.log(this.b)
}.bind(obj)

//以上正好利用了bind返回一个函数的特性,在用户点击之后才执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值