5、ES5的call和apply和bind方法的使用。

使用call()、apply()、bind()方法调用函数时,都会把函数里面的this指向他们的第一个参数

不同点。

  1. 参数不同。call()、bind()的参数一样。第一个参数是this指向的对象,从第二个起,传递的是调用函数的参数。apply()的第二个参数是需要调用的函数的参数数组。
  2. 执行不同。call()、apply()是马上执行。bind()是返回一个函数,调用的时候才执行。

例子1:普通调用。

这里实际上是window调用test方法。所以test里面的this指向window。

function test(data) {
        console.log(this,data);
}
test("12");//这里实际上是window调用test方法。所以test里面的this指向window。

 

例子2:call、apply调用。

var obj = {username:"张三"};

    function test(data) {
        console.log(this,data);
    }
    //这里使用call方法调用test函数,强行把test函数的this改变为第一个参数obj
    test.call(obj,222);

    //用apply方法调用test函数,强行把test函数的this改变为第一个参数obj
    test.apply(obj,[222]);

上面的代码,test方法打印的this,就是上面的obj对象。

例子3:bind。

bind会返回一个函数,函数的this执行bind的第一个参数。并且bind不会马上执行函数。需要去调用。

    var obj = {username:"张三"};

    function test(data) {
        console.log(this,data);
    }
    //使用bind把test函数的this改变为obj,并且返回新的函数。并不会立即执行函数
    var bind_test = test.bind(obj,33);
    bind_test();//调用bind之后的新函数

    test.bind(obj,444)();//相当于上面的2行代码。立即调用

    setTimeout(function (data) {
        console.log(this,data);
    }.bind(obj,555),1000)

上面的代码 test.bind(obj,444)() 使用bind返回一个函数之后,加上括号。表示马上调用。

 

转载于:https://my.oschina.net/kunBlog/blog/1634611

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值