apply、bind、call的区别

154 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情

call

在 JavaScript 中,函数是对象的方法。

如果一个函数不是 JavaScript 对象的方法,那么它就是全局对象的函数

call() 方法是预定义的 JavaScript 方法。

它可以用来调用所有者对象作为参数的方法。

通过 call(),您能够使用属于另一个对象的方法。

var person = { 
    fullName: function() { 
        return this.firstName + " " + this.lastName; 
    } 
} 
var person1 = { 
    firstName:"Bill", lastName: "Gates", 
} 
person.fullName.call(person1); 
// 将返回 "Bill Gates"

apply

apply() 方法与 call() 方法非常相似,

不同之处是:

call() 方法分别接受参数。

apply() 方法接受数组形式的参数。

如果要使用数组而不是参数列表,则 apply() 方法非常方便。

bind

bind()方法会创建一个新函数,当这个函数被调用时,this值是传递给bind()的第一个参数,

传入bind方法的第二个以及以后的参数加上绑定函数运行时,本身的参数按照顺序作为作为 原函数的参数来调用原函数。

bind返回的绑定函数也能使用new操作符创建对象,这种行为像把原函数当成构造器,提供的 this值被忽略,同时调用时的参数被提供给模拟函数。

语法:fun.bind(thisArg[, arg1[, arg2[, ...]]])

bind 方法与apply、call最大的不同就是前者返回一个绑定上下文的函数,而后两者是直接执行了函数。

var foo = {     
    value1 
}; 
function bar(name, age) {    
    return {   
        valuethis.value,   
        name: name,   
        age: age     
    } 
}; 
bar.call(foo, "Jack"20); 
// 直接执行了函数 
// {value: 1, name: "Jack", age: 20} 
var bindFoo1 = bar.bind(foo, "Jack"20); 
// 返回一个函数 bindFoo1(); 
// {value: 1, name: "Jack", age: 20}

通过上述代码可以看出bind有如下特性:

  • 1、可以指定this
  • 2、返回一个函数
  • 3、可以传入参数
  • 4、柯里化

最后

今天分享结束啦,希望开卷即有益。

坏心眼.webp