徹底搞懂 call() 和 apply() 方法


call 和 apply 理解前提要明白 this

 

書上說的是: 改變this指向(看起來很高深)

 

步入正題:

一般情況下, 我們定義一個函數:

function test () {
    console.log(123);        
}

 

然后會這樣去調用:

test() // 打印123

 

但是你還可以試試這樣調用:

 

test.call() // 效果和直接調用一樣, 其實這才是JS內部調用函數的方式.  apply() 一樣

所以, 可以把 call 當作一個對象方法

如果沒有參數默認就是直接執行函數,

參數可以是一個, 或者多個

一個的話 :

就是書上說的改變 this 指向, 把函數內部所有的 this 變成那個參數

如果是多個參數 :

第一個當作 this 指向, 其余的當作參數傳遞

 

舉個栗子 : 

定義一個構造函數: 

function Person (name, age) {
    this.name = name;
    this.age = age;
}

可以這樣用:

var person1 = new Person('洋哥', 20);

也可以這樣用:

var person2 = {};
Person.call(person2, '洋哥', 20) // 效果和上面的一模一樣

// person2 對象傳入, 並且執行 Person 構造函數

 

apply() 和call() 一模一樣, 只是call 傳入參數方式是直接傳入

 

apply() 就兩個參數, 第一個是 this 指向, 第二個是一個數組, 里面是參數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM