美文网首页
JavaScript中call() 、 apply() 、bin

JavaScript中call() 、 apply() 、bin

作者: January丶缘 | 来源:发表于2019-05-26 15:23 被阅读0次

    在刚接触javascript时,就碰到call(),apply(),bind(),我一直不是很明白。在工作中接触它们次数多了,对这三个方法也有了点理解,总的就是一句话:三者的作用都是改变函数的执行上下文。今天把它们简单阐述一下!

    JavaScript权威指南上的解释是: call() 、apply()可以看作是某个对象的方法,通过调用方法的形式来间接调用函数。我理解它们的作用是:都能继承另一个对象的方法和属性。bind() 就是将某个函数(属性或方法)绑定到某个对象上。

    var obj = {name: "Tom"}
    
    function foo() {console.log(this.name)}
    
    foo.call(obj)       //打印结果: Tom   this 指向 指定的对象(obj)
    
    • call() 和apply()的第一个参数都是指定的对象。这个对象就是该函数的执行上下文。
    • call()和apply()的区别:两者之间的参数不同
      call()在第一个参数之后的 后续所有参数就是传入该函数的值(形参)。
      apply() 只有两个参数,第一个是指定的对象,第二个是数组,这个数组的每一个元素都是该函数的参数(形参)。
    // call()函数
    var obj = {
        message: 'My name is: '
    }
    
    function getName(firstName, lastName) {
        console.log(this.message + firstName);
    }
    
    getName.call(obj, 'Tom', 'Jorry') // My name is: Tom  this 指向 指定的对象(obj)
    
    // apply() 函数
    var obj = {
        message: 'My name is: '
    }
    
    function getName(firstName, lastName) {
        console.log(this.message + firstName);
    }
    
    getName.apply(obj, ['Tom', 'Jorry']) // My name is: Tom  传参 是一个数组
    
    //  this 指向 指定的对象(obj)
    

    bind() 它的参数和call()相同。它和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。

    相关文章

      网友评论

          本文标题:JavaScript中call() 、 apply() 、bin

          本文链接:https://www.haomeiwen.com/subject/zezxtctx.html