JavaScript_call,bind,apply的区别

call、apply、bind

1、改变方法中this关键字并且将方法执行,bind 返回的是一个新的函数,你必须调用它才会被执行。

2、call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象。第二个参数的区别:

  * call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,obj.myFun.call(db,'成都','广州');

  * apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,['成都','广州']);

  * bind 除了返回是函数以外,它 的参数和 call 一样。

var name = '小王',age = 17;
var obj = {
    name: '小张',
    objAge: this.age,
    myFun: function (fm, t) {
        console.log(this.name + " 年龄" + this.age + " 来自 " + fm + " 去往 " + t);
    }
}
var db = {
    name: '德玛',
    age: 99
}
obj.myFun.call(db,'成都','上海');     // 德玛 年龄 99  来自 成都去往上海
obj.myFun.apply(db,['成都','上海']);      // 德玛 年龄 99  来自 成都去往上海
obj.myFun.bind(db,'成都','上海')();       // 德玛 年龄 99  来自 成都去往上海
obj.myFun.bind(db,['成都','上海'])();   // 德玛 年龄 99  来自 成都, 上海去往 undefined
原文地址:https://www.cnblogs.com/chickenfarm/p/12575333.html