Lala Code

Lala 的前端大補帖,歡迎一起鑽研前端技術😊

0%

綁定 this 的方法-call / apply / bind

Imgur

因為 this 是動態的,所以會需要一些方法,讓函式被呼叫都能有固定的 this

1
2
3
4
5
6
7
8
9
10
var cat = {
name: 'mimi',
printName: function () {
console.log(this.name);
},
};

var dog = {
name: 'bobee',
};

我們都知道,要印出 cat 的 name,只需要調用 cat.printName();
但 dog 如果不新增方法,要怎麼印出 dog name 呢?

..
.

Imgur

.
..

當然是借 cat 的來用囉 😆


call、apply、bind

藉其他物件的函式,改變 this 的對象,用來強制指定 this,這三個的分別可以把他們分成兩組來看
call、apply 是指定 this 後直接執行
bind 是先指定 this,不會馬上執行,要調用時再加()執行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var cat = {
name: 'mimi',
printName: function () {
console.log(this.name);
},
};

var dog = {
name: 'bobee',
};

cat.printName.call(dog); // bobee
cat.printName.apply(dog); // bobee
cat.printName.bind(dog)(); // bobee

如此一來就可以順利取得 dog 的 name


代入參數

代入參數時使用的方式不太一樣

1
2
3
call(物件名稱, 參數1, 參數2); // 逗號隔開
apply(物件名稱, [參數1, 參數2]); // 用陣列代入
bind(物件名稱)(參數1, 參數2); // 在函式調用代入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var cat = {
name: 'mimi',
showAge: function (num) {
console.log(this.name + num + '歲');
},
};

var dog = {
name: 'bobee',
};

cat.showAge.call(dog, 11); // bobee11歲
cat.showAge.apply(dog, [11]); // bobee11歲
cat.showAge.bind(dog)(11); // bobee11歲


有了 call、apply、bind 可以確保當前的 this 是誰,避免不小心去連結到全域物件或是不想指向的物件喔!

Hey!想學習更多前端知識嗎?

最近 Lala 開了前端課程 👉【實地掌握RWD - 12小時新手實戰班】👈
無論您是 0 基礎新手,又或是想學 RWD 的初學者,
我們將帶你從零開始,深入了解並掌握 RWD 響應式網頁設計的核心技術,快來一起看看吧 😊



🚀線上課程分享

線上課程可以加速學習的時間,省去了不少看文件的時間XD,以下是我推薦的一些課程
想學習更多關於前後端的線上課程,可以參考看看。

Hahow

Hahow 有各式各樣類型的課程,而且是無限次數觀看,對學生或上班族而言,不用擔心被時間綁住



六角學院

如果你是初學者,非常推薦六角學院哦!
剛開始轉職也是上了六角的課,非常的淺顯易懂,最重要的是,隨時還有線上的助教幫你解決問題!


Udemy

Udemy 裡的課程非常的多,品質普遍不錯,且價格都滿實惠的,CP值很高!
也是很多工程師推薦的線上課程網站。
❤️