ES5-bind用法及与以前的apply和call

当我们调用一个函数的时候,函数中的this一般是指向调用者的。但是我们其实可以在调用函数的时候,传入一个对象,让函数中的this指向我们传入的对象,而不是调用者本身。

apply,call,bind都是用来干这件事的,只是具体的用法不一样。

例:

1.调用没有参数的函数时候apply,call用法一样

var name = 'tom';

var obj = {name:'jack'};

function fun(){

  console.log(this.name);

}

fun();

fun.call(obj);

fun.apply(obj);
输出:tom jack jack
2.调用有参数的函数的时候,apply和call传入参数的方式不一样
    var name = 'tom';
    var obj = {name:'jack'};
    function fun1(age){
        alert(this.name+age);
    }
    fun1(11);
    fun1.call(obj,11);
    fun1.apply(obj,[11]);
输出:tom11 jack11 jack11
3.bind的用法是返回this指向改变后的函数,而不是像apply和call一样直接调用。所以bind一般用于修改回调函数的this
    var name = 'tom';
    var obj = {name:'jack'};
    function fun2(age){
        alert('bind'+this.name+age);
    }
    var fun3 = fun2.bind(obj);
    fun3(11);
输出:bindjack11 
 
原文地址:https://www.cnblogs.com/maycpou/p/12325357.html