注意!JS的結構你真的瞭解嗎?

aokihu發表於2018-09-27

ES6的新特性解構非常好用,但是使用的時候有沒有坑呢?還真有一個,聽我慢慢道來。

通常來說解構操作是對資料進行的,但是在JS中的資料跟別的語言不同,它不是單純的資料解構,往往可以往裡面塞入很多其他的功能進去,看一下下面的程式碼

注意!JS的結構你真的瞭解嗎?

這裡我就假設有一個書本的資料結構,除了showPrice設個屬性是一個方法外,其他的都是基本型別資料,那麼我直接呼叫book.showPrice()方法,顯示的結果是這樣

注意!JS的結構你真的瞭解嗎?

這個結果跟我預期的是一樣的,那麼現在來試驗下結構解析的方法來呼叫showPrice()方法

注意!JS的結構你真的瞭解嗎?

那麼看一下這次的顯示結果吧

注意!JS的結構你真的瞭解嗎?

結果是undefined!為什麼會這樣呢?來看一下this現在是指向那裡了吧

注意!JS的結構你真的瞭解嗎?

輸出結果如下

注意!JS的結構你真的瞭解嗎?

this指向了global,也就是現在的指標不再是book因此沒有了unitprice的屬性,那麼輸出自然是undefined了。

這是一種情況,然而如果是Class又會如何呢?這次我就直接把兩種情況一起羅列出來

注意!JS的結構你真的瞭解嗎?

下面是顯示結果

注意!JS的結構你真的瞭解嗎?

可以看到,通過解構方式獲取到的showPrice()方法是沒有this指標的,直接指向了undefined了。

通過這兩個試驗,應該瞭解到ES6的解構只能處理不設計到this指標的資料型別

相關文章