this指標問題
1 export class Component {
2 task: Task;
3 test() {
4 _.foreach(this.task.propreties, funtion(property) {
5 const task = this.task;
6 })
}
}
第5行中報錯: this 是 undefined。
原因比較容易判斷: 在foreach 中 this 並不是 component
用的是lodash提供的函式
https://www.lodashjs.com/docs...
檢視官網之後,並沒有提到this的問題。
於是檢視了Javascript中的foreach 函式
可以看到, Javascript中的foreach函式,有一個可選引數, thisArg
當執行回撥函式 callbackFn 時,用作 this 的值。
所以,若我們用的是Javascript中的foreach函式, 就可以使用如下的解決方案:
1 export class Component {
2 task: Task;
3 test() {
4 this.task.propreties.foreach(property => {
5 const task = this.task;
6 }, this)
}
}
同時,我們也可以讓 task 作為 thisAry引數 , 如第六行。 這是時候 this 就表示 task。
1 export class Component {
2 task: Task;
3 test() {
4 this.task.propreties.foreach(property => {
5 const task = this;
6 }, task)
}
}
值得注意的是,
如果 thisArg 引數有值,則每次 callbackFn 函式被呼叫時,this 都會指向 thisArg 引數。如果省略了 thisArg 引數,或者其值為 null 或 undefined,this 則指向全域性物件。
所以實際上,在Javascript中,不加這個this, 指的也是全域性物件。
回到前面, 由於lodash 提供的 _.foreach()函式, 並沒有如同 javascipt 中的 thisArg引數
所以,我們可以自己定義一個this。
const that = this;
之後用到 this 的地方,用 this 替換就可以。
1 export class Component {
2 task: Task;
3 test() {
4 const that = this;
5 _.foreach(that.task.propreties, funtion(property) {
6 const task = that.task;
7 })
}
}
webstrom 或 idea 除錯介面按鈕
一、首先說第一組按鈕,共8個按鈕,從左到右依次如下:
Show Execution Point (Alt + F10):
如果你的游標在其它行或其它頁面,點選這個按鈕可跳轉到當前程式碼執行的行。
Step Over (F8)
步過,一行一行地往下走,如果這一行上有方法不會進入方法。
Step Into ( )
步入,如果當前行有方法,可以進入方法內部,一般用於進入自定義方法內,不會進入官方類庫的方法。
Force Step Into (Alt + Shift + F7):
強制步入,能進入任何方法,檢視底層原始碼的時候可以用這個進入官方類庫的方法。
Step Out (Shift + F8):
步出,從步入的方法內退出到方法呼叫處,此時方法已執行完畢,只是還沒有完成賦值。
Drop Frame (預設無):
回退斷點。回到方法的呼叫處,同時上下文內所有的變數的值也回到那個時候。
該按鈕能夠點選的前提條件是:當前所處的方法有上級方法,如果你是main方法裡,那麼按鈕就是灰色,無法點選;
Run to Cursor (Alt + F9):
執行到游標處,你可以將游標定位到你需要檢視的那一行,然後使用這個功能,程式碼會執行至游標行,而不需要打斷點。
Evaluate Expression (Alt + F8):
計算表示式。
二、第二組按鈕,共7個按鈕,從上到下依次如下:
Rerun 'xxxx'
重新執行程式,會關閉服務後重新啟動程式。
Resume Program (F9):恢復程式,
比如,你在第20行和25行有兩個斷點,當前執行至第20行,按F9,則執行到下一個斷點(即第25行),再按F9,則執行完整個流程,因為後面已經沒有斷點了。
Stop 'xxx' (Ctrl + F2):
連續按兩下,關閉程式。有時候你會發現關閉服務再啟動時,報埠被佔用,這是因為沒完全關閉服務的原因,你就需要查殺所有JVM程式了。
View Breakpoints (Ctrl + Shift + F8):檢視所有斷點。
7. Mute Breakpoints:
啞的斷點,選擇這個後,所有斷點變為灰色,斷點失效,按F9則可以直接執行完程式。再次點選,斷點變為紅色,有效。如果只想使某一個斷點失效,可以在斷點上右鍵取消Enabled。