前言:
這篇主要整理卡斯柏老師在課程中,介紹常用 this
調用方法的筆記
參考資料:
JavaScript 核心篇
關於this是一個很神奇的東西這件事情
JavaScript 核心觀念(41)-函式以及 This 的運作-this:簡易呼叫
何謂 this ?
this
是 JavaScriptc函式內的關鍵字,在全域下 this
即為 window、在嚴格模式下則為 undefined
、Node模式下則為 globalThis
。我們可以在 console 中驗證此想法。
this 使用地方
- 物件中調用
重點:物件中的調用只有跟誰呼叫他有關係
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| let myName = '物件中的資料';
function callPerson(){ console.log('this', this.myName); }
let Myfamily ={ myName: 'Andy', callFunction: callPerson }
Myfamily.callFunction()
let Test = Myfamily.callFunction; Test();
let Test2 = Myfamily.callFunction(); Test2;
|
- 簡易呼叫
何時為簡易呼叫?
直接呼叫
立即函式
閉包
Call Back Function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| var windowVariable = '全域變數'; function call(){ console.log(this,this.windowVariable); } call();
var test = 'rest'; (function(){ console.log(this.test); function callSomeone(){ console.log(this.test); }; callSomeone(); })();
var test = "test3"; function calculate(base = 50) { var money = base; return function (saveMoney) { money = money + saveMoney; console.log(this.test, money); }; }
var MyWallet = calculate(100); MyWallet(20);
var array = [1,2,3]; var test = 'wwww3'; array.forEach(function(item,index){ console.log(this.test) });
var vm = "全域";
var family = { vm: "小明", callName: function () { console.log('1',this); setTimeout(function () { console.log(this,this.vm); }, 1000); }, }; family.callName();
|
基本上不要使用,原因如下:
我剛發現 let
沒有全域變數,所以當我們直接使用 simple call
呼叫後直接 undefined
,範例如下:
1 2 3 4 5
| let windowVariable = '全域變數'; function call(){ console.log(this.windowVariable); } call();
|
簡易呼叫的 this 本質就是 undefined