关于apply,bind,call的一些应用以及this的一些理解!!!!

本文详细介绍了JavaScript中this关键字的指向规则及其在不同场景下的应用。同时深入探讨了apply、call及bind方法的区别与联系,特别是apply的灵活运用,如求取数组的最大最小值及数组合并。

首先大家可能听的最多的是this的指向问题,this的指向问题大概可以这样概括,对象的this指向本身,匿名函数this指向的是windon或者是包裹的上级,事件的this指向是dom。不懂同学可以点击this指向

好了不多说进入正题,apply,call,以及bind(new 更改的this指向默认的是apply),这三个都可以改变this的指向,哪它们的 区别什么?

call、apply、bind方法的共同点和区别:

apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文(函数的每次调用都会拥有一个特殊值——本次调用的上下文(context)——这就是this关键字的值。);
apply 、 call 、bind 三者都可以利用后续参数传参;
bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

call,apply,bind详细

*apply的一些扩展

1.数组最大最小值

求数组中的最大最小值,js有相应的方法:Math.min(),Math.max(),但是这两个方法有个不方便的地方就是其参数不能是数组,而是单个元素值,即(para1,para2,para3....)。所以使用就没有那么方便了,但是我们可以使用这个方法,并且运行速度比传统快:

1
2
var  min = Math.min.apply( null , arr);
var  max = Math.max.apply( null , arr);

 2.数组合并。数组的合并也和求最值一样,我们可以使用简单的push(para1);进行循环push.但我们也可以使用比较简单的方法: 

1
Array.prototype.push.apply(arrA, arrB);  //将数组arrB push到数组 arrA中。

  

这里要解释下能这么用的原因。从另外一个关于apply的文章,我们可以了解到,function的apply方法的第二个参数是一个数组集合, 在调用的时候,他需要的不是一个数组,但是为什么他给我一个数组我仍然可以将数组解析为一个一个的参数,这个就是apply的一个巧妙的用处,可以将一个数组默认的转换为一个参数列表([param1,param2,param3] 转换为 param1,param2,param3) ,所以利用变个特性,我们就实现了上面的功能。
下面是我的完整代码,方便大家学习了解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$( '#getMinMax' ).click( function  () {
        var  arr = [1, 2, 3, 4, 5, 6, 7, 0.9, 11];
        var  min = Math.min.apply( null , arr);
        var  max = Math.max.apply( null , arr);
        alert( 'min:'  min  '  max:'  max);
    });
 
    $( '#unite' ).click( function  () {
        var  arrA = [ '1' '2' '3' ];
        var  arrB = [4, 5, 6];
        Array.prototype.push.apply(arrA, arrB);
        var  str =  'newArr:[' ;
        for  ( var  i = 0; i < arrA.length; i  ) {
            str  = arrA[i]    ',' ;
        }
        str = str.substr(0, str.length - 1)  ']' ;
        alert(str);
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值