js中call、apply和bind的區別和原理及擴展的高級運用
Jul 04, 2020 am 09:58 AM前言
在面試的過程中,會有許多新問題出現讓你拓展新的知識,也會發現學習中忽略的點。
在前兩天的一次面試中,面試官就問了call、apply和bind的差別。事實上,我們也應該領悟得到面試官更想問的東西是什麼,也就是拓展出來的東西。
call
call是所有函數都能呼叫的方法,是Function.prototype
裡的方法
作用
呼叫函數
改變this,作為第一個參數
#傳遞參數,第二個參數之後的所有個數的參數
案例
1 2 3 4 5 6 7 8 |
|
#解析:
第一行輸出,呼叫了fn1
並將this
指向fn2
第二行輸出,事實上,執行的call()
才是關鍵,這裡就涉及了Function.prototype.call()
的機制,它只是把.call()
之前的程式碼段當作一個變量,將傳遞的程式碼段指向this
,則fn1.call指向了fn2
,於是就相對於fn2.call()
,只是這裡傳遞的this
為window
#運用
-
繼承的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function
Father(uname,age){
this.uname= uname;
this.age=age;
}
Father.prototype={
constructor:Father,
sing:
function
(){
console.log(
"唱跳rap"
);
}
}
function
Son(){
Father.call(this,uname,age)
}
Son.prototype=
new
Father();
登入後複製
#apply
apply同樣也是所有函數都能呼叫的方法,是Function.prototype
裡的方法
作用
呼叫函數
改變this
傳遞參數,第二個參數之後的所有陣列參數
#與call的差異
apply第二個參數是Array,而call是將參數以個數的形式傳入
使用
-
運用Math函數取得最大值
1
2
3
let arr=Array.of(2,42,56,89,1,24,56,22)
let max=Math.max.apply(Math,arr)
console.log(max);
登入後複製
- ##bind
bind同樣也是所有函數都能呼叫的方法,是
Function.prototype裡的方法
作用
改變this
傳遞參數,第二個參數之後的所有個數參數
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 |
|
以上是js中call、apply和bind的區別和原理及擴展的高級運用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)