在修改前輩留下來的代碼時踩到一個坑。簡單講一下代碼作了什麼事:在 try/catch 裏實例化多個類,並調用類的方法爲其賦值,catch 到錯誤也不會中斷,而是經過打日誌的形式收集報錯信息。javascript
我須要在裏面新實例化一個類,有樣學樣,上來就是一頓copy改,但是新增的類的某個屬性老是不對,排查了半天才發現一個坑。java
class Point { constructor(x, y) { this.x = x this.y = y } getX() { return this.x } setX(x) { this.x = x } } let p, cat try { p = new Point(1, 2) cat = new Cat('胖虎') // 這裏實例化了一個不存在的類,用來模擬報錯,實際狀況比這個複雜 p.setX(66) // 這一行應該寫在 `cat` 的前面,否則 `cat` 報錯後直接中斷下面語句的執行,致使這行語句沒有執行 } catch (e) { console.log(e) } console.log(p.getX())
執行結果,x
沒有被賦值成66,拋出錯誤致使程序中斷,賦值語句沒有執行
this
class Point { constructor(x, y) { this.x = x this.y = y } getX() { return this.x } setX(x) { this.x = x } } let p, cat try { p = new Point(1, 2) p.setX(66) // 方法調用緊隨實例後面,不受下面代碼的影響 cat = new Cat('胖虎') } catch (e) { console.log(e) } console.log(p.getX())
執行結果,x
正確被賦值,錯誤也正常拋出
3d