美文网首页
046|JavaScript函数的call&apply

046|JavaScript函数的call&apply

作者: 中年小钢炮 | 来源:发表于2017-05-25 00:49 被阅读18次

    前面的课程中讲解了两种情况下的函数this指向,全局this和成员方法this都是属于被动this,即默认设置的。

    在JavaScript中,可以主动设置函数执行时的this变量,以覆盖掉默认设置。

    call方法

    每一个JavaScript函数对象都有一个call方法,通过call方法可以在指定的this来调用此函数。call方法参数如下:

    func.call(this, ...args)
    

    其中第一个参数是函数func执行时的this,this后面的参数将会保持原样的传给func。
    我们通过一个例子来理解一下:

    function setAge(aAge)
    {
        this.age = aAge
    }
    
    var student = {}
    console.log(student.age) // 函数执行前输出 
    setAge.call(student, 18) // this参数被设置为student
    console.log(student.age) // 函数执行后输出
    

    上述代码中,setAge函数体本身与student对象无关,它只是将this的age属性设置为aAge。
    我们来看一下运行结果:

    运行结果

    可以看到,setAge.call()执行前,student.age为undefined; setAge.call()执行后,student.age为18。这说明setAge.call()方法成功改变了student对象的属性。

    apply方法

    除了call方法外,JavaScript中所有函数对象还一个apply方法,其作用与call类似。惟一的区别是apply方法将所有参数是数组的形式传入。apply语法如下:

    func.apply(this, argsArray) // argsArray为一个Array对象
    

    让我们用apply来改写一下上面的函数:

    function setAge(aAge)
    {
        this.age = aAge
    }
    
    var student = {}
    console.log(student.age)
    // setAge.call(student, 18)
    setAge.apply(student, [18])  // 使用apply
    console.log(student.age)
    

    可以看到,setAge.call替换成了setAge.apply,另外第二个参数由18变成了[18]。让我们看一下运行结果:

    运行结果

    OK,完事。

    什么是bind()?
    什么是继承?

    相关文章

      网友评论

          本文标题:046|JavaScript函数的call&apply

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