接續上一篇JavaScript ES6 課程筆記的內容,繼續記錄。
縮寫
物件縮寫
若新物件的屬性名稱跟被賦值的屬性名稱相同的話,就可以不用重複寫屬性名稱了。
ex: (傳統寫法)
1 2 3 4 5 6 7 8 9 10
| let lee = '力宏'; let family = { ming: '小明', mom: '老媽' } let newObj = { family = family, lee = lee } console.log(newObj);
|
以上這個範例,可以看到newObj的屬性名稱,跟被賦予的內容名稱相同。
所以,我們可以省略其中一個,改寫成
ex:
1 2 3 4 5 6 7 8 9 10
| let lee = '力宏'; let family = { ming: '小明', mom: '老媽' } let newObj = { family, lee } console.log(newObj);
|
只要寫該屬性名稱就可以囉,編譯器會自動為你賦予,跟你屬性名稱一樣的內容了。
在 Vue Cli 的情境中
ex:(傳統寫法)
1 2 3 4 5 6 7 8 9 10
| import Vue from 'vue' import App from './App' import router from './router' // 將套件由 './App' 路徑載入,並使用 App 這個變數名稱 new Vue({ el: '#app', router:router, template: '<App/>', components: { App } });
|
以上範例,我們利用 router 載入外部的東西,而 router 的名稱又剛好跟 Vue 物件中的
屬性 router 名稱一模一樣,所以,我們可以直接省略其中一個不寫,
改寫成下面這樣
ex:(縮寫寫法)
1 2 3 4 5 6 7 8 9 10
| import Vue from 'vue' import App from './App' import router from './router' // 將套件由 './App' 路徑載入,並使用 App 這個變數名稱 new Vue({ el: '#app', router, template: '<App/>', components: { App } });
|
物件函式的縮寫
ex:(傳統寫法)
1 2 3 4 5 6
| let obj = { display: function(){ console.lig('Hi'); } } obj.display() // Hi
|
改成縮寫的寫法,就把冒號和function這些拿掉
ex:
1 2 3 4 5 6
| let obj = { display (){ console.log('Hi'); // Hi } } obj.display() // Hi
|
函式縮寫不要跟箭頭函式搞混
注意~~~~~這邊的函式縮寫看起來跟箭頭函式很像,但是,它們兩個作用起來是完全不一樣的喔,這邊不要搞混了,因為,箭頭函式是用在其他場合中的,不是用在這邊的。
縮寫搭配解構賦值的使用
ex:
1 2 3 4 5 6 7 8 9 10 11 12 13
| let GokuTeam = { ming:{ name: '小明' }, mom:{ name: '老媽' }, father:{ name: '老爸' } } let newTeam = {GokuTeam} console.log(newTeam.GokuTeam.ming.name) // 小明
|
以上這個範例,在等號的右邊,我們用一個物件將GokuTeam包在裡面,當成這個新物件的其中一個屬性,而將這個新物件存入變數newTeam中,
此時,你會看到newTeam的屬性裡面,除了包裹ming的新屬性以外,還包裹了物件GokuTeam。
但是,如果,我們只是想要單純複製GokuTeam裡面的屬性的話,
要改成以下這樣
ex:
1 2 3 4 5 6 7 8 9 10 11 12 13
| let GokuTeam = { ming:{ name: '小明' }, mom:{ name: '老媽' }, father:{ name: '老爸' } } let newTeam = {...GokuTeam} console.log(newTeam.ming.name) // 小明
|
如此,透過...
只將GokuTeam的元素提取出來並return
回去,
這樣的淺複製,就可以讓newTeam只有塞入GokuTeam中各元素的複製內容,
而沒有包含GokuTeam本身囉。