js call()与apply()深入理解

1.call()与apply()的由来

Function(函数对象)

正如数组对象对应的类型为Array,数字对应的类型为Number,字符串对应的类型为String一样;

定义一个字符串可以这样定义:    var str='abc';

也可以这样定义:     var str=new String('abc');

定义一个数组可以这样定义:     var arr=[1,2,3];

也可以这样定义:     var arr=new Array(1,2,3);

对于这两种方式本质上是相同的,因为在js底层构建时都会转化为下面一种方式,而函数亦是如此。

普通函数定义:    function add(a,b){return a+b};  或   var add=function(a,b){return a+b;}

等价于构造一个Function对象:     var add=new Function("a","b","return a+b");

或者另一种传参方式   var add=new Function("a,b","return a+b");

new Function(e1,e2,...,body)等价于function(e1,e2,...){body}

而Function中自带了一些方法和属性,比如很有名的arguments,constructor,prototype等属性,以及aplly,call,bind等方法。

2.call方法

调用方式  obj1.fun1.call(obj2,arg1,arg2,...);

 var A={

    add:function(a,b){  return a+b;  }

}

var B={

    reduce:function(a,b){   return a-b;}

}

var c=A.add.call(b,1,2); //返回3

理解:其实就是调用了A的add(1,2)方法,但在此基础上add中的this指向的是B

通俗点理解:call的作用就是B调用了个别人的方法,但是用完又还给A了,B是使用者,不是拥有者。

3.apply()

调用方式  obj1.fun1.call(obj2,args);

用途跟call()一模一样,但后面传的参数是个数组。

高级用法:

Math.min.apply(null,arr); //可求出一个数组中的最小值

Array.prototype.push(arr1,arr2); //用push方法实现连接两个数组

Array.prototype.slice(obj); //将伪数组转化为真数组

伪数组:var json={0:'a',1:'b',2:'c',length:3} 类似这种的数组




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值