call、apply、bind的用法

时间:2019-09-06
本文章向大家介绍call、apply、bind的用法,主要包括call、apply、bind的用法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

call、apply、bind的作用是为了改变函数运行时this的指向

this就是当前行为执行的主体

call

call函数传入两个参数,第一个参数为对象,第二个及后面的参数用来传参。当第一个参数的列表为null或undefined时,默认指向window

var arr = [1, 2, 3, 4, 5];
var max = Math.max.call(null, arr[0], arr[1], arr[2], arr[3], arr[4])//89

Eg:

var obj = {
  message:"My name is:"
}

function getName(firstName,lastName){
  console.log(this.message + fisrtName + " " + lastName);
}

getName.call(obj,"Dot","Dolby");

apply

apply函数同样接收两个参数,第一个参数是要绑定的this的值,第二个参数是一个参数数组。当第一个参数为null、undefined的时候,默认指向window

var arr = [1, 2, 3, 89, 46];
var max = Math.max.apply(null,arr);

apply传入的多个参数,会依次作为形参进入函数中,比如max函数无法处理一个数组,但却可以同时处理多个参数,这样就可以调用了。看看下面的例子

Eg:

var obj = {
    message:"My name is:"
}
function getName(firstName,lastName){
  console.log(this.message,firstName + " " + lastName);
}
getNmae.apply(obj,["Dot","Dolby"]);

bind

bind函数也可以传入多个参数,指向要绑定的this的值。但值得注意的是,bind不会直接执行。需要使用括号调用才可以

Eg:

                 var obj = {
            msg: "this is a message"
        }
        function getName() {
            console.log(this.msg)
        }

        getName.bind(obj)();

如果我们只用getName.bind(obj);是不会被调用的,只是绑定了this

原文地址:https://www.cnblogs.com/seanxushuo/p/11477975.html