こんばんわ。KMC3回生の id:tyage です。
前回に続けて6/16にECMAScript6勉強会 第3回を行いました
第3回
第3回では module, computed property name, Symbol を読みました。
module
moduleでは別ファイルでexportされた値を、変数に束縛することができる機構です。
moduleのexport方法は以下の様な種類があります。
- export * from "bar" // bar.jsでexportされたオブジェクトをexport
- export {a, b} from "bar" // bar.jsでexportされたa, bをexport
- export var a = 2, b = 3 // 変数a, bをexport
- export function a() {} // 関数aをexport(generatorやclassも可)
- export default 1 // defaultという名前で1をexport
importする方法には以下の様な種類があります
- import {a, b} from "bar" // bar.jsでexportされたa, bの値をa, bに束縛
- import a from "bar" // bar.jsでexportされたdefaultの値をaに束縛
- import a, {b, c} from "bar" // bar.jsでexportされたdefaultの値をaに、b, cの値をb, cにを束縛
- import "bar" // bar.jsを実行するが値の束縛はしない
- module a from "bar" // bar.jsでexportされたdefaultの値を {default: defaultの値} としてaに束縛?【要出典】
この辺り、複雑で分かりにくいので修正されるとは思います。 (module a from "bar"記法は消えるのではないかという噂も)
computed property name
これは、オブジェクトを宣言するときに評価結果をプロパティ名にできる記法です。
let x = 'y' let a = { [x+x]: 1 } a.yy === 1
この例では [x+x] の部分で x+x が評価されて "yy" となって yy というプロパティ名の値が 1 になります。
get, setと組み合わせても使えるようですが、あまり使うことは多くないのではないでしょうか・・・
let a = { get [Math.random()]() { return 1 } }
Symbol
Symbolはユニークなオブジェクトを生成することのできるオブジェクトです。
Symbol('a') !== Symbol('a')
Symbolで生成したオブジェクトはプロパティ名に用いることができます。
let s = Symbol('a') let o = { [s]: 1 } o[s] === 1 Object.getOwnPropertyNames(o).length === 0 Object. getOwnPropertySymbols(o).length === 1
また、グローバルに扱えるSymbolを文字列(key)と組み合わせて登録・取得を行うことがきでます。
let a = Symbol.for("key") Symbol.keyFor(a) === "key"
well known symbolsなどもあり、これを利用することで内部で使われているプロパティにアクセスすることが可能となります。(Symbol.iterator等)
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-well-known-symbols
第4回は6/23です。