ES 6-オブジェクトの拡張-属性名式
1521 ワード
JavaScriptオブジェクトのプロパティを定義するには、2つの方法があります.
上のコードの方法の1つは、識別子を直接属性名として使用する方法であり、2つは式を属性名として使用する方法であり、この場合、式をカッコ内に置く.
ただし、オブジェクトを字面量で定義する場合(カッコを使用する)、ES 5ではメソッド1(識別子)でしか属性を定義できません.
ES 6は,文字通りの量でオブジェクトを定義する場合に,メソッド2(式)をオブジェクトの属性名とし,すなわち式を括弧内に置くことを可能にする.
式は、メソッド名を定義するためにも使用できます.
属性名式と簡潔な表現は、同時に使用できないため、エラーが発生します.
なお、属性名式がオブジェクトである場合、デフォルトではオブジェクトが文字列[object Object Object]に自動的に変換されることに注意してください.
上のコードでは、[keyA]と[keyB]が[object Object]なので、[keyB]は[keyA]を上書きしますが、myObjectは最後に[object Object]属性が1つしかありません.
//
obj.foo = true;
//
obj['a' + 'bc'] = 123;
上のコードの方法の1つは、識別子を直接属性名として使用する方法であり、2つは式を属性名として使用する方法であり、この場合、式をカッコ内に置く.
ただし、オブジェクトを字面量で定義する場合(カッコを使用する)、ES 5ではメソッド1(識別子)でしか属性を定義できません.
var obj = {
foo: true,
abc: 123
};
ES 6は,文字通りの量でオブジェクトを定義する場合に,メソッド2(式)をオブジェクトの属性名とし,すなわち式を括弧内に置くことを可能にする.
let lastWord = 'last word';
const a = {
'first word': 'hello',
[lastWord]: 'world'
};
a['first word'] // "hello"
a[lastWord] // "world"
a['last word'] // "world"
式は、メソッド名を定義するためにも使用できます.
let obj = {
['h' + 'ello']() {
return 'hi';
}
};
obj.hello() // hi
属性名式と簡潔な表現は、同時に使用できないため、エラーが発生します.
//
const foo = 'bar';
const bar = 'abc';
const baz = { [foo] };
//
const foo = 'bar';
const baz = { [foo]: 'abc'};
なお、属性名式がオブジェクトである場合、デフォルトではオブジェクトが文字列[object Object Object]に自動的に変換されることに注意してください.
const keyA = {a: 1};
const keyB = {b: 2};
const myObject = {
[keyA]: 'valueA',
[keyB]: 'valueB'
};
myObject // Object {[object Object]: "valueB"}
上のコードでは、[keyA]と[keyB]が[object Object]なので、[keyB]は[keyA]を上書きしますが、myObjectは最後に[object Object]属性が1つしかありません.