JavaScript 解释call()和apply()方法

JavaScript 解释call()和apply()方法

call()方法: call方法主要用于使用不同的 this 对象调用函数。在JavaScript中 this 指的是一个对象。它取决于我们如何调用特定的函数。在全局作用域中, this 指向全局对象 window 。在函数内部, this 同样指向全局对象 window

在严格模式下,当我们使用任何函数时, this 指的是 undefined 。在像call这样的函数中,this可能指向不同的对象。借助call方法,我们可以使用不同的对象调用特定的函数。

语法:

object.objectMethod.call( objectInstance, arguments )

参数:

它接受两个参数:

  • ObjectInstance: 它是一个我们想要明确使用的对象
  • Arguments: 它是我们想要传递给调用函数的参数

示例1:

Javascript

<script> 
    const obj = { 
        firstName: "First_name", 
        lastName: "Last_name", 
        printName: function () { 
            console.log(this.firstName  
                + " " + this.lastName); 
        } 
    }; 
    obj.printName(); 
</script>

输出:

First_name Last_name

显然,因为我们正在使用对象obj调用printName()函数,所以 this 应该指的是对象obj。在对象obj内部,我们有firstName = “First_name”和lastName = “Last_name”,所以输出结果是“First_name Last_name”。

示例2: 正如我们所知,我们可以使用不同的对象调用特定的函数。所以我们也可以使用不同的对象调用printName函数。

Javascript

<script> 
    const obj1 = { 
        firstName: "First_name", 
        lastName: "Last_name"
    }; 
    const obj2 = { 
        firstName: "Sachin", 
        lastName: "Tendulkar"
    }; 
    function printName() { 
        console.log(this.firstName + " " + this.lastName); 
    } 
    printName.call(obj2); 
  
</script>

输出:

Sachin Tendulkar

在这种情况下,我们使用call方法来调用带有对象obj2的函数。所以在这种情况下, this 将指向对象 obj2 。因为this取决于我们如何实际调用函数。在这种情况下, this 不会指向全局对象 window ,而是指向对象 obj2

使用call方法传递参数: 我们也可以通过call函数传递参数。

示例3:

Javascript

<script> 
    const obj1 = { 
        firstName: "First_name", 
        lastName: "Last_name"
    }; 
    const obj2 = { 
        firstName: "Sachin", 
        lastName: "Tendulkar"
    }; 
    function printName(profession, country) { 
        console.log(this.firstName + " " 
            + this.lastName + " " + 
            profession + " " + country); 
    } 
    printName.call(obj2, "Cricketer", "India"); 
</script>

输出:

Sachin Tendulkar Cricketer India

使用call方法传递参数时,参数之间用逗号(,)分隔。

apply()方法: 就像call方法一样,我们也可以将函数绑定到任何对象上。使用apply()方法,我们还可以使用不同的对象调用给定的函数。

语法:

object.objectMethod.apply(objectInstance, arrayOfArguments)

参数: 它需要两个参数:

  • ObjectInstance :我们想要显式使用的对象
  • Arguments :我们要传递给调用函数的参数

Javascript

<script> 
    const obj1 = { 
        firstName: "First_name", 
        lastName: "Last_name"
    }; 
    const obj2 = { 
        firstName: "Sachin", 
        lastName: "Tendulkar"
    }; 
    function printName() { 
        console.log(this.firstName + " " + this.lastName); 
    } 
    printName.apply(obj2); 
</script>

输出:

Sachin Tendulkar

使用apply方法传递参数: 我们也可以使用apply函数传递参数。

Javascript

<script> 
    const obj1 = { 
        firstName: "First_name", 
        lastName: "Last_name"
    }; 
    const obj2 = { 
        firstName: "Sachin", 
        lastName: "Tendulkar"
    }; 
    function printName(profession, country) { 
        console.log(this.firstName + " "
            + this.lastName + " " + 
            profession + " " + country); 
    } 
    printName.apply(obj2, ["Cricketer", "India"]); 
</script>

输出:

Sachin Tendulkar Cricketer India

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程