call&apply方法

1. call方法

1. 可以让一个对象去使用另一个对象的方法

比如

function clg1(){

      console.log(clg1)

    }

    function clg2(){

      console.log(clg2)

    }

    clg2.call(clg1)//打印出来的是clg2

是由clg1去调用了clg2 这个函数,this指向clg1

再来一个

    function add(a,b){

      return a+b

    }

    function sub(a,b){

      return a-b

    }

    console.log(add.call(sub,3,1))//打印4

使用sub去借用了add这个函,this指向了sub

再比如用伪数组去借用数组的方法

var obj={

      0:'a',

      1:'b',

      2:'c',

      length:3

    }

    Array.prototype.push.call(obj,'d','e','f')

    console.log(obj)//d e f都加入进去了,且length也变为了6

    obj=Array.prototype.slice.call(obj)//slice方法是将数组提取出来,如果不赋值obj还是原来的类型

    console.log(obj)//此时obj已经变为真数组

call方法是一个个的接受参数,而apply方法接受的是数组类型的参数,如果要使用的是数组而不是参数列表,apply方法更方便

2.apply方法

还是上面3个示例,使用apply方法来实现

function clg1(){

      console.log(clg1)

    }

    function clg2(){

      console.log(clg2)

    }

    clg1.apply(clg2)//和上面效果相同

function add(a,b){

      return a+b

    }

    function sub(a,b){

      return a-b

    }

    console.log(add.apply(sub,[3,1]))//此时需要传入的参数是数组

var obj={

      0:'a',

      1:'b',

      2:'c',

      length:3

    }

    Array.prototype.push.apply(obj,['d','e','f'])//参数为数组

    console.log(obj)//d e f都加入进去了,且length也变为了6

    obj=Array.prototype.slice.apply(obj)//slice方法是将数组提取出来,如果不赋值obj还是原来的类型

    console.log(obj)//此时obj已经变为真数组

call&&apply的使用场景

     参数比较少的情况,使用call比较方便

     参数已经放在一个数组或者是伪数组中,就使用apply

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值