apply、call、bind的区别和主要应用场景

apply、call、bind的区别和主要应用场景

apply、call、bind的区别

JavaScript中每个function对象都有一个call()方法和一个apply()方法

语法:

apply():function.apply(this,[arg1,arg2,…])

最多两个参数:this、数组(一个对象也数组)

call():function.call(this,arg1,arg2…)

多个参数:this、参数列表

都是可以用来代替另一个对象调用一个方法,将函数的对象上下文从初始的上下文改变为由thisObj指定的新的对象。
bind()的语法和call()相似,区别在于bind方法返回值是函数以及bind接收参数列表的使用。

bind返回对应函数,之后便于调用;apply、call是立即调用。
在ES6的箭头函数下,call、apply会失效

主要应用场景

1、求数组中的最大和最小值

var arr=[1,2,31,30]
var max=Math.max.apply(null,arr)//31
var min=Math.min.apply(null,arr)//1

2、将类数组转为数组

var trueArr=Array.prototype.slice.call(arr)

3、数组追加

var arr1=[1,2,3]
var arr2=[4,5,6]
var total=[].push.apply(arr1,arr2);//6

4、判断变量类型

function isArry(obj){
    return Object.prototype.toString.call(obj)=='[Object Array]'
}

5、做继承

function Person(name,age){
    this.name=name
    this.age=age
    this.sayAge=function(){
        console.log(this.age)
    }
}
function Female(){
    Person.apply(this,arguments)
}
var female=new Female('张三','20')

6、使用log代理console.log

function log(){
    console.log.apply(console.arguments)
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值