ES6語(yǔ)法糖

對(duì)象字面量是指以{}形式直接表示的對(duì)象,比如下面這樣:

var book = {
  title: 'Modular ES6',
  author: 'Nicolas',
  publisher: 'O′Reilly'
}

ES6 為對(duì)象字面量的語(yǔ)法帶來(lái)了一些改進(jìn):包括屬性/方法的簡(jiǎn)潔表示,可計(jì)算的屬性名等等,我們逐一來(lái)看:

屬性的簡(jiǎn)潔表示法

一個(gè)我們聲明的對(duì)象中包含若干屬性,其屬性值由變量表示,且變量名和屬性名一樣的。比如下面這樣,我們想把一個(gè)名為 listeners 的數(shù)組賦值給events對(duì)象中的listeners屬性,用ES5我們會(huì)這樣做:

var listeners = []
function listen() {}
var events = {
  listeners: listeners,
  listen: listen
}

ES6則允許我們簡(jiǎn)寫(xiě)成下面這種形式:

var listeners = []
function listen() {}
var events = { listeners, listen }

這是ES6帶來(lái)的好處之一,它提供了眾多更簡(jiǎn)潔,語(yǔ)義更清晰的語(yǔ)法,讓我們的代碼的可讀性,可維護(hù)性大大提升。

可計(jì)算的屬性名

對(duì)象字面量的另一個(gè)重要更新是允許你使用可計(jì)算的屬性名,在ES5中我們也可以給對(duì)象添加屬性名為變量的屬性,一般說(shuō)來(lái),我們要按下面方法這樣做,首先聲明一個(gè)名為expertise的變量,然后通過(guò)person[expertise]這種形式把變量添加為對(duì)象person的屬性:

var expertise = 'journalism'
var person = {
  name: 'xu',
  age: 25
}
person[expertise] = {
  years: 5,
  interests: ['international', 'politics', 'internet']
}

ES6 中,對(duì)象字面量可以使用計(jì)算屬性名了,把任何表達(dá)式放在中括號(hào)中,表達(dá)式的運(yùn)算結(jié)果將會(huì)是對(duì)應(yīng)的屬性名,上面的代碼,用ES6可以這樣寫(xiě):

var expertise = 'journalism'
var person = {
  name: 'xu',
  age: 25,
  [expertise]: {
    years: 5,
    interests: ['international', 'politics', 'internet']
  }
}

不過(guò)需要注意的是,簡(jiǎn)寫(xiě)屬性和計(jì)算的屬性名不可同時(shí)使用。這是因?yàn)椋?jiǎn)寫(xiě)屬性是一種在編譯階段的就會(huì)生效的語(yǔ)法糖,而計(jì)算的屬性名則在運(yùn)行時(shí)才生效。如果你把二者混用,代碼會(huì)報(bào)錯(cuò)。而且二者混用往往還會(huì)降低代碼的可讀性,所以JavaScript在語(yǔ)言層面上限制二者不能混用也是個(gè)好事。

var expertise = 'journalism'
var journalism = {
  years: 5,
  interests: ['international', 'politics', 'internet']
}
var person = {
  name: 'xu',
  age: 25,
  [expertise] // 這里會(huì)報(bào)語(yǔ)法錯(cuò)誤
}

方法定義

傳統(tǒng)上如何定義對(duì)象方法,下述代碼中,我們構(gòu)建了一個(gè)事件發(fā)生器,其中的on方法用以注冊(cè)事件,emit方法用以執(zhí)行事件:

var emitter = {
  events: {},
  on: function (type, fn) {
    if (this.events[type] === undefined) {
      this.events[type] = []
    }
    this.events[type].push(fn)
  },
  emit: function (type, event) {
    if (this.events[type] === undefined) {
      return
    }
    this.events[type].forEach(function (fn) {
      fn(event)
    })
  }
}

ES6 的對(duì)象字面量方法簡(jiǎn)寫(xiě)允許我們省略對(duì)象方法的function關(guān)鍵字及之后的冒號(hào),改寫(xiě)后的代碼如下:

var emitter = {
  events: {},
  on(type, fn) {
    if (this.events[type] === undefined) {
      this.events[type] = []
    }
    this.events[type].push(fn)
  },
  emit(type, event) {
    if (this.events[type] === undefined) {
      return
    }
    this.events[type].forEach(function (fn) {
      fn(event)
    })
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 參考 重新認(rèn)識(shí)ES6中的語(yǔ)法糖 ES6入門(mén)-let 和 const 命令部分 對(duì)象字面量 字面量提供一種簡(jiǎn)寫(xiě),我的...
    Jocelyn_Long閱讀 4,605評(píng)論 0 3
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,195評(píng)論 0 13
  • 三月清風(fēng)雨作怪,化作情欲淫云海。 不聊九天玄女歸,才知高才門(mén)駁回。
    清云生閱讀 258評(píng)論 0 2
  • [返回攻略主頁(yè)] 寵物品質(zhì) 寵物名字顏色即品質(zhì) 寵物名字顏色:白→綠→藍(lán)→紫→橙 白色寵物屬性最差,橙色寵物屬性最...
    戴手套敲代碼的小哥閱讀 1,115評(píng)論 0 0
  • 如果所有人都失去理智,咒罵你, 你仍能保持頭腦情形; 如果所有人都懷疑你, 你仍能堅(jiān)信自己,讓所有的懷疑動(dòng)搖; 如...
    晨帆_leg閱讀 1,065評(píng)論 0 1