ES 6エントリーオブジェクトの拡張
4061 ワード
1.属性の簡潔な表現
ES 6では変数と関数を直接書き込むことができ,オブジェクトの属性と方法としてコードの書き込みをより簡潔にする.
ES 6ではオブジェクト内に直接変数を書き込むことができます.この場合、属性名は変数名で、属性値は変数値です.
2.属性名式
JavaScriptにおける属性名の式の方法は2つあり,1つは直接識別子を属性名,2つ目は式を属性名とする.2番目に書くときは式をかっこの中に入れます
式はメソッド名を定義するためにも使用できます(属性名式は簡潔な表現と同時に使用できません)
属性名式がオブジェクトである場合、デフォルトではオブジェクトは文字列に自動的に変換されます[object Object]
3.メソッドのname属性
関数のname属性は、関数名を返し、オブジェクトメソッドも関数であるため、name属性も返します.
特殊な場合getterとsetterのプロパティはgetとsetの上にあります
特殊な場合bindが作成した関数name属性はboundに元の関数の名前を返す
特殊な場合Function構造関数が作成した関数で、nameはanonymousを返します.
オブジェクトのメソッドがSymbolの場合、nameはこのSymbolの説明を返します.
4.属性の列挙性と遍歴
列挙可能性
オブジェクトの各プロパティには、そのプロパティの動作を制御する記述オブジェクトがあります.getownPropertyDescriptorメソッドは、このプロパティの記述オブジェクトを取得できます.
オブジェクトを記述するenumerableプロパティは、「列挙可能」と呼ばれ、trueの場合、現在の操作が無視される操作があることを示します.
ES 6のすべてのclassのプロトタイプの方法は枚挙にいとまがない.
属性の遍歴
ES 6には,オブジェクトの属性を巡回する5つの方法がある.
5.superキーワード
thisのキーワードは常に関数が存在する現在のオブジェクトを指し、ES 6はまた別の類似のキーワードsuperを追加し、現在のオブジェクトのプロトタイプオブジェクトを指す.
注意:superキーワードがプロトタイプオブジェクトを表す場合、オブジェクトのメソッドにしか使用できません.他の場所で使用するとエラーが発生します.
JavaScriptエンジンにとって、ここのsuperはオブジェクトの方法に使われていないので、上記の3つのsuperの使い方は間違っています.1つ目の書き方はsuperが属性に使用され、2つ目と3つ目の書き方はsuperが1つの関数に使用され、foo属性に値を付与します.現在、JavaScriptエンジンに確認できるのは、オブジェクトメソッドの略記法のみであり、オブジェクトのメソッドを定義している.
公衆番号へようこそ【小夭さん】
ES 6入門シリーズ
ES 6入門のlet、cont
ES 6入門の変数の解構賦値
ES 6エントリー文字列の拡張
ES 6入門の正則的な拡張
ES 6入門の数値の拡張
ES 6入門の関数の拡張
ES 6入門の対象の新しい方法
Gitチュートリアル
フロントエンドGit基礎チュートリアル
ES 6では変数と関数を直接書き込むことができ,オブジェクトの属性と方法としてコードの書き込みをより簡潔にする.
const f = 'a'
const b = {f}
b // {f: 'a'}
const b = {f: f}
ES 6ではオブジェクト内に直接変数を書き込むことができます.この場合、属性名は変数名で、属性値は変数値です.
function u(x, y){
return {x, y}
}
// ====
function u(x, y){
return {x: x, y: y }
}
u(1, 2) // {x:1, y: 2}
:
function o() {
const x = 1;
const x = 2;
return {x, y}
}
o() // {x:1, y:2}
2.属性名式
JavaScriptにおける属性名の式の方法は2つあり,1つは直接識別子を属性名,2つ目は式を属性名とする.2番目に書くときは式をかっこの中に入れます
//
obj.foo = true
//
obj['a' + 'bc'] = 123
//
let t = 'm'
let obj = {
[t]: true,
['a' + 'bc']: 123
}
式はメソッド名を定義するためにも使用できます(属性名式は簡潔な表現と同時に使用できません)
let obj = {
['h' + 'ello']() {
return 'hi'
}
}
obj.hello() // hi
属性名式がオブジェクトである場合、デフォルトではオブジェクトは文字列に自動的に変換されます[object Object]
const ka = {a: 1}
const kb = {b: 2}
const myObj = {
[ka]: 'va',
[kb]: 'vc'
}
myObj // Object {[object Object]: 'vc'}
3.メソッドのname属性
関数のname属性は、関数名を返し、オブジェクトメソッドも関数であるため、name属性も返します.
const p = {
n() {
console.log('h')
}
}
p.n.name // n
特殊な場合getterとsetterのプロパティはgetとsetの上にあります
const obj = {
get foo() {},
set fod() {}
}
obj.foo.name // undefined
const d = Object.getOwnPropertyDescriptor(obj, 'foo')
d.get.name // get foo
d.set.name // set fod
特殊な場合bindが作成した関数name属性はboundに元の関数の名前を返す
var do = function(){
}
do.bind().name // bound do
特殊な場合Function構造関数が作成した関数で、nameはanonymousを返します.
(new Function()).name // anonymous
オブジェクトのメソッドがSymbolの場合、nameはこのSymbolの説明を返します.
const k = Symbol(' ')
k.name // "[ ]"
4.属性の列挙性と遍歴
列挙可能性
オブジェクトの各プロパティには、そのプロパティの動作を制御する記述オブジェクトがあります.getownPropertyDescriptorメソッドは、このプロパティの記述オブジェクトを取得できます.
let obj = {f: 234}
Object.getOwnPropertyDescriptor(obj, 'foo')
// {
// value: 234,
// writable: true,
// enumerable: true,
// configurable: true
// }
オブジェクトを記述するenumerableプロパティは、「列挙可能」と呼ばれ、trueの場合、現在の操作が無視される操作があることを示します.
enumerate false
- for...in :
- Object.keys():
- JSON.stringify():
- Object.assign(): enumerable false ,
ES 6のすべてのclassのプロトタイプの方法は枚挙にいとまがない.
属性の遍歴
ES 6には,オブジェクトの属性を巡回する5つの方法がある.
(1)for...in
for...in ( Symbol )。
(2)Object.keys(obj)
Object.keys , ( ) ( Symbol ) 。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames , ( Symbol , ) 。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols , Symbol 。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys , , Symbol , 。 1)for..in
,
, 。
, 。
Symbol , 。
5.superキーワード
thisのキーワードは常に関数が存在する現在のオブジェクトを指し、ES 6はまた別の類似のキーワードsuperを追加し、現在のオブジェクトのプロトタイプオブジェクトを指す.
注意:superキーワードがプロトタイプオブジェクトを表す場合、オブジェクトのメソッドにしか使用できません.他の場所で使用するとエラーが発生します.
//
const obj = {
foo: super.foo
}
//
const obj = {
foo: () => super.foo
}
//
const obj = {
foo: function () {
return super.foo
}
}
JavaScriptエンジンにとって、ここのsuperはオブジェクトの方法に使われていないので、上記の3つのsuperの使い方は間違っています.1つ目の書き方はsuperが属性に使用され、2つ目と3つ目の書き方はsuperが1つの関数に使用され、foo属性に値を付与します.現在、JavaScriptエンジンに確認できるのは、オブジェクトメソッドの略記法のみであり、オブジェクトのメソッドを定義している.
公衆番号へようこそ【小夭さん】
ES 6入門シリーズ
ES 6入門のlet、cont
ES 6入門の変数の解構賦値
ES 6エントリー文字列の拡張
ES 6入門の正則的な拡張
ES 6入門の数値の拡張
ES 6入門の関数の拡張
ES 6入門の対象の新しい方法
Gitチュートリアル
フロントエンドGit基礎チュートリアル