ES6的新特性解構非常好用,但是使用的時候有沒有坑呢?還真有一個,聽我慢慢道來。
通常來說解構操作是對資料進行的,但是在JS中的資料跟別的語言不同,它不是單純的資料解構,往往可以往裡面塞入很多其他的功能進去,看一下下面的程式碼
這裡我就假設有一個書本的資料結構,除了showPrice
設個屬性是一個方法外,其他的都是基本型別資料,那麼我直接呼叫book.showPrice()
方法,顯示的結果是這樣
這個結果跟我預期的是一樣的,那麼現在來試驗下結構解析的方法來呼叫showPrice()
方法
那麼看一下這次的顯示結果吧
結果是undefined
!為什麼會這樣呢?來看一下this
現在是指向那裡了吧
輸出結果如下
this
指向了global
,也就是現在的指標不再是book
因此沒有了unit
和price
的屬性,那麼輸出自然是undefined
了。
這是一種情況,然而如果是Class又會如何呢?這次我就直接把兩種情況一起羅列出來
下面是顯示結果
可以看到,通過解構方式獲取到的showPrice()
方法是沒有this
指標的,直接指向了undefined
了。
通過這兩個試驗,應該瞭解到ES6的解構只能處理不設計到this
指標的資料型別