19.1 Objectオブジェクト(Object Objects)
19.1.1 Objectコンストラクター(The Object Constructor)
Objectコンストラクターは、次の特徴があります。
- 組み込みオブジェクト%Object%です。
- グローバルオブジェクト の"Object"プロパティの初期値です。
- コンストラクターとして呼び出されると、新しい通常のオブジェクト を作成します。
- コンストラクターとしてではなく関数として呼び出されたとき、型変換を実行します。
- サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。
19.1.1.1 Object ( [ value ] )
オプション引数valueを使用してObject関数を呼び出すと、次の手順が実行されます。
- NewTarget が undefined でも アクティブな関数でもないなら、
- ? OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%") を返す
- value が undefined または null なら、 OrdinaryObjectCreate(%Object.prototype%) を返す
- ! ToObject(value) を返す
Objectコンストラクター関数の"length"プロパティは、1です。
[[Construct]]で呼び出されると、NewTargetは値あり。
19.1.2 Objectコンストラクタのプロパティ(Properties of the Object Constructor)
Objectコンストラクタには、次の特徴があります。
- 値%Function.prototype%である[[Prototype]]内部スロットがあります。
- "length"プロパティがあります。
- 次の追加のプロパティがあります。
19.1.2.1 Object.assign ( target, ...sources )
assign関数は、列挙可能なすべての独自プロパティの値をソースオブジェクトからオブジェクトtargetにコピーします。 assign関数が呼び出されると、次の手順が実行されます。
- ? ToObject(target) を to とする
- 渡された引数が1つだけなら to を返す
- 2番目の引数で始まる引数値のリストを Listを sources とする
- sources の各要素を nextSource とし、インデックスの昇順で、 nextSource ごとに次を実行する
- nextSource が undefined と null でないなら、
- ! ToObject(nextSource) を from とする
- ? from.[[OwnPropertyKeys]]() を keys とする
- keys の各要素を nextKey とし、リスト順で nextKey ごとに次を実行する
- nextSource が undefined と null でないなら、
- to を返す
assign関数の"length"プロパティは、2です。
19.1.2.2 Object.create ( O, Properties )
create関数は、指定されたプロトタイプで新しいオブジェクトを作成します。 create関数が呼び出されると、次の手順が実行されます。
- Type(O) が Object でも Null でもないなら、TypeError例外をスローする
- OrdinaryObjectCreate(O) を obj とする
- Properties が undefined でないなら、
- ? ObjectDefineProperties(obj, Properties) を返す
- obj を返す
19.1.2.3 Object.defineProperties ( O, Properties )
defineProperties関数は、独自プロパティの追加や、既存の独自プロパティの属性の更新をおこないます。 defineProperties関数が呼び出されると、次の手順が実行されます。
- ? ObjectDefineProperties(O, Properties) を返す
19.1.2.3.1 ランタイムセマンティクス(Runtime Semantics): ObjectDefineProperties ( O, Properties )
引数O, Propertiesを持つ抽象操作ObjectDefinePropertiesは、次の手順を実行します。
- Type(O) が Object型 でないなら、TypeError例外をスローする
- ? ToObject(Properties) を props とする
- ? props.[[OwnPropertyKeys]]() を keys とする
- 空の新規List を descriptors とする
- keys の 各要素を nextKey とし、リスト順で nextKey ごとに次を実行する
- ? props.[[GetOwnProperty]](nextKey) を propDesc とする
- propDesc が undefined ではなく、 propDesc.[[Enumerable]] が true なら、
- ? Get(props, nextKey) を descObj とする
- ? ToPropertyDescriptor(descObj) を desc とする
- nextKey と desc で構成されるペアを (2要素のリスト) を descriptors の最後に追加する
- descriptors の各ペアを pair とし、リスト順で pair ごとに次を実行する
- pair の 最初の要素を P とする
- pair の 2番目の要素を desc とする
- ? DefinePropertyOrThrow(O, P, desc) を実行する
- O を返す
19.1.2.4 Object.defineProperty ( O, P, Attributes )
defineProperty関数は、独自プロパティを追加や、既存の独自プロパティの属性を更新します。 defineProperty関数が呼び出されると、次の手順が実行されます。
- Type(O) が Object型 でないなら、TypeError例外をスローする
- ? ToPropertyKey(P) を key とする
- ? ToPropertyDescriptor(Attributes) を desc とする
- ? DefinePropertyOrThrow(O, key, desc) を実行する
- O を返す
19.1.2.5 Object.entries ( O )
entries関数が引数Oで呼び出されると、次の手順が実行されます。
- ? ToObject(O) を obj とする
- ? EnumerableOwnPropertyNames(obj, key+value) を nameList とする
- CreateArrayFromList(nameList) を返す
19.1.2.6 Object.freeze ( O )
freeze関数が呼び出されると、次の手順が実行されます。
- Type(O) が Object型 でないなら、 O を返す
- ? SetIntegrityLevel(O, frozen) を status とする
- status が false なら、TypeError例外をスローする
- O を返す
19.1.2.7 Object.fromEntries ( iterable )
fromEntriesメソッドが引数iterableで呼び出されると、次の手順が実行されます。
- ? RequireObjectCoercible(iterable) を実行する
- OrdinaryObjectCreate(%Object.prototype%) を obj とする
- Assert: obj は 独自プロパティを持たない拡張可能な通常のオブジェクト
- CreateDataPropertyOnObject関数 で定義されたアルゴリズムステップを stepsDefine とする
- ! CreateBuiltinFunction(stepsDefine, « ») を adder とする
- ? AddEntriesFromIterable(obj, iterable, adder) を返す
19.1.2.7.1 CreateDataPropertyOnObject関数
CreateDataPropertyOnObject関数は、匿名の組み込み関数です。 CreateDataPropertyOnObject関数が引数keyとvalueを使用して呼び出されると、次の手順が実行されます。
- this値 を O とする
- Assert: Type(O) は Object型
- Assert: O は拡張可能な 通常のオブジェクト
- ? ToPropertyKey(key) を propertyKey とする
- ! CreateDataPropertyOrThrow(O, propertyKey, value) を実行する
- undefined を返す
19.1.2.8 Object.getOwnPropertyDescriptor ( O, P )
getOwnPropertyDescriptor関数が呼び出されると、次の手順が実行されます。
- ? ToObject(O) を obj とする
- ? ToPropertyKey(P) を key とする
- ? obj.[[GetOwnProperty]](key) を desc とする
- FromPropertyDescriptor(desc) を返す
19.1.2.9 Object.getOwnPropertyDescriptors ( O )
getOwnPropertyDescriptors関数が呼び出されると、次の手順が実行されます。
- ? ToObject(O) を obj とする
- ? obj.[[OwnPropertyKeys]]() を ownKeys とする
- ! OrdinaryObjectCreate(%Object.prototype%) を descriptors とする
- ownKeys の各要素を key とし、リスト順で key ごとに次を実行する
- ? obj.[[GetOwnProperty]](key) を desc とする
- ! FromPropertyDescriptor(desc) を descriptor とする
- descriptor が undefined でないなら、 ! CreateDataPropertyOrThrow(descriptors, key, descriptor) を実行する
- descriptors を返す
19.1.2.10 Object.getOwnPropertyNames ( O )
getOwnPropertyNames関数が呼び出されると、次の手順が実行されます。
- ? GetOwnPropertyKeys(O, string) を返す
19.1.2.11 Object.getOwnPropertySymbols ( O )
getOwnPropertySymbols関数が引数Oで呼び出されると、次の手順が実行されます。
- ? GetOwnPropertyKeys(O, symbol) を返す
19.1.2.11.1 ランタイムセマンティクス(Runtime Semantics): GetOwnPropertyKeys ( O, type )
抽象演算GetOwnPropertyKeysは、オブジェクトOとtype(stringまたはsymbol)を使用して呼び出されると、次の手順が実行されます。
- ? ToObject(O) を obj とする
- ? obj.[[OwnPropertyKeys]]() を keys とする
- 空の新規List を nameList とする
- keys の 各要素を nextKey とし、リスト順で nextKey ごとに次を実行する
- CreateArrayFromList(nameList) を返す
19.1.2.12 Object.getPrototypeOf ( O )
getPrototypeOf関数が引数Oで呼び出されると、次の手順が実行されます。
- ? ToObject(O) を obj とする
- ? obj.[[GetPrototypeOf]]() を返す
19.1.2.13 Object.is ( value1, value2 )
is関数が引数value1とvalue2で呼び出されると、次の手順が実行されます。
- SameValue(value1, value2) を返す
19.1.2.14 Object.isExtensible ( O )
isExtensible関数が引数Oで呼び出されると、次の手順が実行されます。
- Type(O) が Object型でないなら、 false を返す
- ? IsExtensible(O) を返す
19.1.2.15 Object.isFrozen ( O )
isFrozen関数が引数Oで呼び出されると、次の手順が実行されます。
- Type(O) が Object型 でないなら、 true を返す
- ? TestIntegrityLevel(O, frozen) を返す
19.1.2.16 Object.isSealed ( O )
isSealed関数が引数Oで呼び出されると、次の手順が実行されます。
- Type(O) が Object型でないなら、 true を返す
- ? TestIntegrityLevel(O, sealed) を返す
19.1.2.17 Object.keys ( O )
keys関数が引数Oで呼び出されると、次の手順が実行されます。
- ? ToObject(O) を obj とする
- ? EnumerableOwnPropertyNames(obj, key) を nameList とする
- CreateArrayFromList(nameList) を返す
19.1.2.18 Object.preventExtensions ( O )
preventExtensions関数が引数Oで呼び出されると、次の手順が実行されます。
- Type(O) が Object型 でないなら、 O を返す
- ? O.[[PreventExtensions]]() を status とする
- status が false なら、TypeError例外をスローする
- O を返す
19.1.2.19 Object.prototype
Object.prototypeの初期値は%Object.prototype%です。
このプロパティの属性は、{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } です。
19.1.2.20 Object.seal ( O )
seal関数が引数Oで呼び出されると、次の手順が実行されます。
- Type(O) が Object型 でないなら、 O を返す
- ? SetIntegrityLevel(O, sealed) を status とする
- status が false なら、TypeError例外をスローする
- O を返す
19.1.2.21 Object.setPrototypeOf ( O, proto )
setPrototypeOf関数が引数Oとprotoで呼び出されると、次の手順が実行されます。
- ? RequireObjectCoercible(O) を O にセットする
- Type(proto) が Object型 でも Null でもないなら、TypeError例外をスローする
- Type(O) が Object型 でないなら、 O を返す
- ? O.[[SetPrototypeOf]](proto) を status とする
- status が false なら、TypeError例外をスローする
- O を返す
19.1.2.22 Object.values ( O )
setPrototypeOf関数が引数Oで呼び出されると、次の手順が実行されます。
- ? ToObject(O) を obj とする
- ? EnumerableOwnPropertyNames(obj, value) を nameList とする
- CreateArrayFromList(nameList) を返す
19.1.3 Objectプロトタイプオブジェクトのプロパティ(Properties of the Object Prototype Object)
Objectプロトタイプオブジェクトは、次の特徴があります。
- 組み込みオブジェクト%ObjectPrototype%です。
- [[Extensible]]内部スロットがあり、値はtrueです。
- 9.4.7.1で定義されている[[SetPrototypeOf]]メソッド以外の、通常のオブジェクトに対して定義された内部メソッドがあります。(したがって、これはイミュータブルプロトタイプエキゾチックオブジェクトです。)
- [[Prototype]]内部スロットがあり、値はnullです。
19.1.3.1 Object.prototype.constructor
Object.prototype.constructorの初期値は%Object%です。
19.1.3.2 Object.prototype.hasOwnProperty ( V )
hasOwnPropertyメソッドが引数Vで呼び出されると、次の手順が実行されます。
- ? ToPropertyKey(V) を P とする
- ? ToObject(this値) を O とする
- ? HasOwnProperty(O, P) を返す
19.1.3.3 Object.prototype.isPrototypeOf ( V )
isPrototypeOfメソッドが引数Vで呼び出されると、次の手順が実行されます。
19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
propertyIsEnumerableメソッドが引数Vで呼び出されると、次の手順が実行されます。
- ? ToPropertyKey(V) を P とする
- ? ToObject(this値) を O とする
- ? O.[[GetOwnProperty]](P) を desc とする
- desc が undefined なら、 false を返す
- desc.[[Enumerable]] を返す
19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
toLocaleStringメソッドが呼び出されると、次の手順が実行されます。
この関数のオプションのパラメーターは使用されません。ECMA-402 toLocaleString関数で使用されるパラメーターパターンに対応することを目的としています。 ECMA-402サポートをおこなわない実装でも、パラメーター位置を他の目的に使用してはいけません。
19.1.3.6 Object.prototype.toString ( )
toStringメソッドが呼び出されると、次の手順が実行されます。
- this値 が undefined なら、 "[object Undefined]" を返す
- this値 が null なら、 "[object Null]" を返す
- ! ToObject(this値) を O とする
- ? IsArray(O) を isArray とする
- isArray が true なら、 "Array" を builtinTag とする
- 5. と異なるなり、 O が [[ParameterMap]] 内部スロットを持っているなら、 "Arguments" を builtinTag とする
- 6. と異なるなり、 O が [[Call]] 内部メソッドを持っているなら、 "Function" を builtinTag とする
- 7. と異なるなり、 O が [[ErrorData]] 内部スロットを持っているなら、 "Error" を builtinTag とする
- 8. と異なるなり、O が [[BooleanData]] 内部スロットを持っているなら、 "Boolean" を builtinTag とする
- 9. と異なるなり、O が [[NumberData]] 内部スロットを持っているなら、 "Number" を builtinTag とする
- 10. と異なるなり、 O が [[StringData]] 内部スロットを持っているなら、 "String" を builtinTag とする
- 11. と異なるなり、O が [[DateValue]] 内部スロットを持っているなら、 "Date" を builtinTag とする
- 12. と異なるなり、O が [[RegExpMatcher]] 内部スロットを持っているなら、"RegExp" を builtinTag とする
- 13. と異なるなら、 "Object" を builtinTag とする
- ? Get(O, @@toStringTag) を tag とする
- Type(tag) が String型 でないなら、 builtinTag を tag にセットする
- "[object ", tag, and "]" の文字列連結を返す
この関数は、%ObjProto_toString%組み込みオブジェクトです。
19.1.3.7 Object.prototype.valueOf ( )
valueOfメソッドが呼び出されると、次の手順が実行されます。
この関数は、%ObjProto_valueOf%組み込みオブジェクトです。
19.1.4 オブジェクトインスタンスのプロパティ(Properties of Object Instances)
オブジェクトインスタンスには、オブジェクトプロトタイプオブジェクトから継承されたプロパティがあります。その他の特別なプロパティはありません。
19.2 Functionオブジェクト(Function Objects)
19.2.1 Functionコンストラクター(The Function Constructor)
Functionコンストラクターは、次の特徴があります。
- 組み込みオブジェクト%Function%です。
- グローバルオブジェクトの"Function"プロパティの初期値です。
- コンストラクターとしてではなく関数として呼び出されたときに、新しい関数オブジェクトを作成して初期化します。 したがって、関数呼び出し Function(…) は、同じ引数を持つオブジェクト作成式 new Function(…) と同等です。
- サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。 Functionの動作を継承するサブクラスコンストラクターは、組み込み関数の内部スロットを使用してサブクラスインスタンスを作成および初期化します。そのために、Functionコンストラクターへのsuper呼び出しを含める必要があります。 関数オブジェクトを定義するためのすべてのECMAScript構文形式は、Functionのインスタンスを作成します。 組み込みのGeneratorFunction、AsyncFunction、およびAsyncGeneratorFunctionサブクラスを除いて、Functionサブクラスのインスタンスを作成する構文上の手段はありません。
19.2.1.1 Function ( p1, p2, … , pn, body )
最後の引数は、関数の本体(実行可能コード)を指定します。 先行する引数はすべて仮パラメーターを指定します。
Function関数がいくつかの引数p1、p2、…、pn、body(引数がない場合もあり)で呼び出された場合、次の手順が実行されます。
- アクティブ関数オブジェクト を C とする
- [[Call]]または[[Construct]]から渡されたargumentsList を args とする
- ? CreateDynamicFunction(C, NewTarget, normal, args) を返す
次の3つの式はすべて同じ結果を生成します。
new Function("a", "b", "c", "return a+b+c")
new Function("a, b, c", "return a+b+c")
new Function("a,b", "c", "return a+b+c")
19.2.1.1.1 ランタイムセマンティクス(Runtime Semantics): CreateDynamicFunction ( constructor, newTarget, kind, args )
抽象操作CreateDynamicFunctionは、引数constructor、 newTarget、kind、 argsを使用して呼び出されます。 constructorは、このアクションを実行するコンストラクター関数です。newTargetは、newが最初に適用されたコンストラクターです。kindは、normal、generator、async、asyncGeneratorのいずれかです。argsは、コンストラクターに渡された引数値のリストです。 次の手順が実行されます。
- Assert: 実行コンテキストスタック には2つ以上の要素あり
- 実行コンテキストスタック の上から2番目の要素を callerContext とする
- callerContext の Realmコンポーネント を callerRealm とする
- 現在のレルムレコード を calleeRealm とする
- ? HostEnsureCanCompileStrings(callerRealm, calleeRealm) を実行する
- newTarget が undefined なら constructor を newTarget にセットする
- kind が normal なら、
- 文法シンボル FunctionBody[~Yield, ~Await] を goal とする
- 文法シンボル FormalParameters[~Yield, ~Await] を parameterGoal とする
- "%Function.prototype%" を fallbackProto とする
- 7. と異なるなり、 kind が generator なら、
- 文法シンボル GeneratorBody を goal とする
- 文法シンボル FormalParameters[+Yield, ~Await] を parameterGoal とする
- "%Generator%" を fallbackProto とする
- 8. と異なるなり、 kind is async なら、
- 文法シンボル AsyncFunctionBody を goal とする
- 文法シンボル FormalParameters[~Yield, +Await] を parameterGoal とする
- "%AsyncFunction.prototype%" を fallbackProto とする
- 9. と異なるなら、
- Assert: kind は asyncGenerator
- 文法シンボル AsyncGeneratorBody を goal とする
- 文法シンボル FormalParameters[+Yield, +Await] を parameterGoal とする
- "%AsyncGenerator%" を fallbackProto とする
- args の要素数を argCount とする
- empty String を P とする
- argCount = 0 なら、 empty String を bodyArg とする
- 13. と異なるなり argCount = 1 なら args[0] を bodyArg とする
- 14. と異なるなら、
- 0x000A (LINE FEED) と ? ToString(bodyArg) と 0x000A (LINE FEED) の文字列連結を bodyString とする
- 次のサブステップを実装に依存する順序で実行する。(解析とエラー検出をインターリーブする可能性があり)
- ゴールシンボルとしてparameterGoalを使用し、! UTF16DecodeString(P) の解析結果を parameters とする。解析失敗なら、SyntaxError例外をスローする
- ゴールシンボルとしてgoalを使用し、! UTF16DecodeString(bodyString) の解析結果を body とする。解析失敗なら、SyntaxError例外をスローする
- body の ContainsUseStrict を strict とする
- parametersまたはbodyで静的セマンティクスエラーが検出されたなら、SyntaxError例外をスロする。 strict が true なら、UniqueFormalParameters : FormalParameters の早期エラールールが適用される
- strict が true で parameters の IsSimpleParameterList が false なら、SyntaxError例外をスローする
- parameters の BoundNames の要素が body のLexicallyDeclaredNames にもあるなら、SyntaxError例外をスローする。
- body Contains SuperCall が true なら、SyntaxError例外をスローする
- parameters Contains SuperCall が true なら、SyntaxError例外をスローする
- body Contains SuperProperty が true なら、SyntaxError例外をスローする
- parameters Contains SuperProperty が true なら、SyntaxError例外をスローする
- kind が generator か asyncGenerator なら、
- parameters Contains YieldExpression が true なら、SyntaxError例外をスローする
- kind が async か asyncGenerator なら、
- parameters Contains AwaitExpression が true なら、SyntaxError例外をスローする
- strict が true なら、
- parameters の BoundNames の要素が重複したいるなら SyntaxError例外をスローする
- ? GetPrototypeFromConstructor(newTarget, fallbackProto) を proto とする
- 現在のレルムレコード を realmF とする
- realmF.[[GlobalEnv]] を scope とする
- ! OrdinaryFunctionCreate(proto, parameters, body, non-lexical-this, scope) を F とする
- kind が generator なら、
- OrdinaryObjectCreate(%Generator.prototype%) を prototype とする
- DefinePropertyOrThrow(F, "prototype",プロパティ記述子 { [[Value]]: prototype, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) を実行する
- 22. と異なるなり、 kind が asyncGenerator なら、
- OrdinaryObjectCreate(%AsyncGenerator.prototype%) を prototype とする
- DefinePropertyOrThrow(F, "prototype",プロパティ記述子 { [[Value]]: prototype, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) を実行する
- 23. と異なるなり、 kind が normal なら、 MakeConstructor(F) を実行する
- NOTE: 非同期関数は構築できない。[[Construct]]内部メソッドまたは"prototype"プロパティがない
- SetFunctionName(F, "anonymous") を実行する
- 表48 の kind に対応するプレフィックスを prefix とする
- prefix と " anonymous(" と P と 0x000A (LINE FEED) と ") {" と bodyString と "}" の文字列連結を sourceString とする
- ! UTF16DecodeString(sourceString) を F.[[SourceText]] にセットする
- F を返す
Kind | プレフィックス |
---|---|
normal | "function" |
generator | "function*" |
async | "async function" |
asyncGenerator | "async function*" |
19.2.2 Functionコンストラクターのプロパティ(Properties of the Function Constructor)
Functionコンストラクターには、次の特徴があります。
- それ自体が組み込み関数オブジェクトです。
- 値が%Function.prototype%である[[Prototype]]内部スロットがあります。
- 次の追加プロパティを持っています
19.2.2.1 Function.length
これは、値が1のデータプロパティです。このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。
19.2.2.2 Function.prototype
Function.prototypeの値は、組み込み関数プロトタイプオブジェクトである%Function.prototype%です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.2.3 Functionプロトタイプオブジェクトのプロパティ(Properties of the Function Prototype Object)
Functionプロトタイプオブジェクトには、次の特徴があります。
- %Function.prototype%です。
- それ自体が組み込み関数オブジェクトです。
- 引数を受け入れ、呼び出されるとundefinedを返します。
- [[Construct]]内部メソッドがありません。 new演算子のコンストラクターとして使用できません。
- 値が%Object.prototype%の[[Prototype]]内部スロットがあります。
- "prototype"プロパティはありません。
- "length"プロパティの値0です。
- 値が空の文字列である"name"プロパティがあり、値はempty Stringです。
19.2.3.1 Function.prototype.apply ( thisArg, argArray )
applyメソッドが引数thisArgおよびargArrayを指定して呼び出されると、次の手順が実行されます。
- this値 を func とする
- IsCallable(func) が false なら、TypeError例外をスローする
- argArray が undefined か null なら、
- PrepareForTailCall() を実行する
- ? Call(func, thisArg) を返す
- ? CreateListFromArrayLike(argArray) を argList とする
- PrepareForTailCall() を実行する
- ? Call(func, thisArg, argList) を返す
19.2.3.2 Function.prototype.bind ( thisArg, ...args )
bindメソッドが引数thisArgと0個以上の引数を指定して呼び出されると、次の手順が実行されます。
- this値 を Target とする
- IsCallable(Target) が false なら、TypeError例外をスローする
- thisArgの後に続く引数を、順番に格納した新規リスト(引数0ならempty)を、 args とする
- ? BoundFunctionCreate(Target, thisArg, args) を F とする
- ? HasOwnProperty(Target, "length") を targetHasLength とする
- targetHasLength が true なら、
- 6. と異なるなら、 0 を L とする
- ! SetFunctionLength(F, L) を実行する
- ? Get(Target, "name") を targetName とする
- Type(targetName) が String型 でないなら、empty String を targetName にセットする
- SetFunctionName(F, targetName, "bound") を実行する
- F を返す
19.2.3.3 Function.prototype.call ( thisArg, ...args )
引数thisArgと0個以上の引数を指定してcallメソッドが呼び出されると、次の手順が実行されます。
- this値 を func とする
- IsCallable(func) が false なら、TypeError例外をスローする
- 空の新規List を argList とする
- このメソッドが複数の引数で呼び出されたなら、左から右の順序で、2番目の引数から始めて、各引数をargListの最後の要素として追加する
- PrepareForTailCall() を実行する
- ? Call(func, thisArg, argList) を返す
19.2.3.4 Function.prototype.constructor
Function.prototype.constructorの初期値は%Function%です。
19.2.3.5 Function.prototype.toString ( )
toStringメソッドが呼び出されると、次の手順が実行されます。
- this値 を func とする
- func がバウンド関数エキゾチックオブジェクト または組み込み関数オブジェクトなら、funcの実装に依存する文字列ソースコード表現を返す。 表現には、NativeFunctionの構文を使用する。 また、funcが既知組み込みオブジェクトで、無名関数として識別されないなら、返される文字列のPropertyNameと一致する部分は、funcの"name"プロパティの初期値である必要がある。
- Type(func) が Object型 で、 func が [[SourceText]] 内部スロットを持ち、 func.[[SourceText]] がUnicodeコードポイントのシーケンスで、 ! HostHasSourceTextAvailable(func) が true なら、
- ! UTF16Encode(func.[[SourceText]]) を返す
- Type(func) が Object型 で、 IsCallable(func) が true なら、funcの実装に依存する文字列ソースコード表現を返す。 表現には、NativeFunctionの構文を使用する。
- TypeError例外をスローする
19.2.3.6 Function.prototype [ @@hasInstance ] ( V )
オブジェクトFの@@hasInstanceメソッドが値Vで呼び出されると、次の手順が実行されます。
- this値 を F とする
- ? OrdinaryHasInstance(F, V) を返す
この関数の"name"プロパティの値は"[Symbol.hasInstance]"です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
これは@@hasInstanceのデフォルトの実装で、ほとんどの関数が継承します。 @@hasInstanceは、特定のコンストラクターのインスタンスであるかどうかを判別するために、instanceof演算子によって呼び出されます。
次のような表現
v instanceof F
は、次のように評価されます。
F[@@hasInstance](v)
コンストラクター関数は、関数で別の@@hasInstanceメソッドを公開することにより、instanceofによってインスタンスとして認識されるオブジェクトを制御できます。
このプロパティは、書き込みおよび構成できません。バインドされた関数のターゲット関数を、グローバルに公開するような改ざんを防ぐためです。
19.2.4 Functionインスタンス(Function Instances)
すべてのFunctionインスタンスはECMAScript関数オブジェクトであり、表27にリストされている内部スロットがあります。Function.prototype.bindメソッド(19.2.3.2)を使用して作成された関数オブジェクトには、表28にリストされている内部スロットがあります。
Functionインスタンスには次のプロパティがあります。
19.2.4.1 length
"length"プロパティの値は整数で、関数が受け付ける引数の数を示します。 ただしこの言語は、引数の数が"length"でない場合でも、関数を呼び出すことができます。 "length"プロパティ数以外の引数で呼び出された関数の動作は、関数に依存します。 このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。
19.2.4.2 name
"name"プロパティの値は、関数を説明する文字列です。 名前には特別な意味はありませんが、通常は変数名またはプロパティ名で、ECMAScriptコードで関数を参照するために使用されます。このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。
コンテキスト名が関連付けられていない無名関数オブジェクトには、"name"独自プロパティはありません。ただし、%Function.prototype%の"name"プロパティを継承します。
19.2.4.3 prototype
コンストラクターとして使用できるFunctionインスタンスには、"prototype"プロパティがあります。 このようなFunctionインスタンスが作成されるたびに、別の通常のオブジェクトが作成され、関数の"prototype"プロパティの初期値になります。 特に指定のない限り、"prototype"プロパティの値は、その関数がコンストラクターとして呼び出されたときに作成されるオブジェクトの[[Prototype]]内部スロットを初期化するために使用されます。
このプロパティの属性は{[[Writable]]:true,[[Enumerable]]:false,[[Configurable]]:false}です。
19.2.5 HostHasSourceTextAvailable ( func )
HostHasSourceTextAvailableは、実装で定義された抽象操作です。ホスト環境で、特定の関数にソーステキストが提供されないようにすることができます。
HostHasSourceTextAvailableの実装は、正常に完了する必要があります。 引数として特定の同じ引数で呼び出されるたびに、同じ完了レコードを返す必要があります。 HostHasSourceTextAvailableのデフォルトの実装は、値がtrueの通常の完了を無条件に返すことです。
19.3 Booleanオブジェクト(Boolean Objects)
19.3.1 Booleanコンストラクター(The Boolean Constructor)
Booleanコンストラクターは、次のような特徴があります。
- 組み込みオブジェクト%Boolean%です。
- グローバルオブジェクトの"Boolean"プロパティの初期値です。
- コンストラクターとして呼び出されると、新しいBooleanオブジェクトを作成して初期化します。
- コンストラクターとしてではなく関数として呼び出されると、型変換を実行します。
- サブクラス化できるように設計されており、クラス定義のextends句の値として使用できます。 Boolean動作を継承するサブクラスのコンストラクターは、[[BooleanData]]内部スロットとともにサブクラスインスタンスを作成および初期化するために、ブールコンストラクターへのsuperコールを含める必要があります。
19.3.1.1 Boolean ( value )
Booleanが引数valueで呼び出されると、次の手順が実行されます。
- ! ToBoolean(value) を b とする
- NewTarget が undefined なら、 b を返す
- ? OrdinaryCreateFromConstructor(NewTarget, "%Boolean.prototype%", « [[BooleanData]] ») を O とする
- b を O.[[BooleanData]] にセットする
- O を返す
19.3.2 Booleanコンストラクターのプロパティ(Properties of the Boolean Constructor)
Booleanコンストラクターは、次のような特徴があります。
- [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
- 次のプロパティがあります。
19.3.2.1 Boolean.prototype
Boolean.prototypeの初期値は%Boolean.prototype%です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.3.3 Booleanプロトタイプオブジェクトのプロパティ(Properties of the Boolean Prototype Object)
Booleanプロトタイプオブジェクトは、次のような特徴があります。
- 組み込みオブジェクト%BooleanPrototype%です。
- 通常のオブジェクトです。
- それ自体がBooleanオブジェクトです。 値がfalseの[[BooleanData]]内部スロットがあります。
- 値が%Object.prototype%の[[Prototype]]内部スロットがあります。
抽象操作thisBooleanValue(value) は、次の手順を実行します。
19.3.3.1 Boolean.prototype.constructor
Boolean.prototype.constructorの初期値は%Boolean%です。
19.3.3.2 Boolean.prototype.toString ( )
次の手順が実行されます。
- ? thisBooleanValue(this値) を b とする
- b が true なら、 "true" を、異なるなら "false" を返す
19.3.3.3 Boolean.prototype.valueOf ( )
次の手順が実行されます。
- ? thisBooleanValue(this値) を返す
19.3.4 Booleanインスタンスのプロパティ(Properties of Boolean Instances)
Booleanインスタンスは、Booleanプロトタイプオブジェクトからプロパティを継承する通常のオブジェクトです。 Booleanインスタンスには[[BooleanData]]内部スロットがあります。 [[BooleanData]]内部スロットは、このブールオブジェクトで表されるブール値です。
19.4 Symbolオブジェクト(Symbol Objects)
19.4.1 Symbolコンストラクター(The Symbol Constructor)
Symbolコンストラクターは、次のような特徴があります。
- 組み込みオブジェクト%Symbol%です。
- グローバルオブジェクトの"Symbol"プロパティの初期値です。
- 関数として呼び出されると、新しいシンボル値を返します。
- new演算子で使用するためのものではありません。
- サブクラス化することを意図していません。クラス定義のextends句の値として使用できますが、super呼び出しすると例外が発生します。
19.4.1.1 Symbol ( [ description ] )
オプションの引数descriptionを指定してSymbolが呼び出されると、次の手順が実行されます。
19.4.2 Symbolコンストラクターのプロパティ(Properties of the Symbol Constructor)
Symbolコンストラクターは、次のような特徴があります。
- [[Prototype]]内部スロットがあり、値が%Function.prototype%です。
- 次のプロパティがあります。
19.4.2.1 Symbol.asyncIterator
Symbol.asyncIteratorの初期値は、既知シンボル@@asyncIteratorです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.2 Symbol.for ( key )
Symbol.forが引数keyを指定して呼び出されると、次の手順が実行されます。
- ? ToString(key) を stringKey とする
- GlobalSymbolRegistry リストの 各要素を e とし、e ごとに次を実行する
- SameValue(e.[[Key]], stringKey) が true なら、 e. [[Symbol]] を返す
- Assert: GlobalSymbolRegistryには、stringKeyのエントリが含まれていない
- [[Description]]値が stringKey である新しい一意のSymbol値 を newSymbol とする
- GlobalSymbolRegistry リストに Record { [[Key]]: stringKey, [[Symbol]]: newSymbol } を追加する
- newSymbol を返す
GlobalSymbolRegistryは、グローバルなリストです。 すべてのレルムで共有されます。 ECMAScriptコードの評価前に、新しい空のリストとして初期化されます。 GlobalSymbolRegistryの要素は、表49の構造をもつレコードです。
フィールド名 | 値 | 目的 |
---|---|---|
[[Key]] | String | シンボルをグローバルに識別するために使用される文字列キー。 |
[[Symbol]] | Symbol | 任意のレルムから取得できるシンボル。 |
19.4.2.3 Symbol.hasInstance
Symbol.hasInstanceの初期値は、既知シンボル@@hasInstanceです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.4 Symbol.isConcatSpreadable
Symbol.isConcatSpreadableの初期値は、既知シンボル@@isConcatSpreadableです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.5 Symbol.iterator
Symbol.iteratorの初期値は、既知シンボル@@iteratorです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.6 Symbol.keyFor ( sym )
Symbol.keyForが引数symで呼び出されると、次の手順が実行されます。
- Type(sym) が Symbol型 でないなら、TypeError例外をスローする
- GlobalSymbolRegistry リストの各要素を e とし、e ごとに次を実行する
- SameValue(e.[[Symbol]], sym) が true なら、 e を返す [[Key]]
- Assert: GlobalSymbolRegistryに、symのエントリが含まれていない
- undefined を返す
19.4.2.7 Symbol.match
Symbol.matchの初期値は、既知シンボル@@matchです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.8 Symbol.matchAll
Symbol.matchAllの初期値は、既知シンボル@@matchAllです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.9 Symbol.prototype
Symbol.prototypeの初期値は、%Symbol.prototype%です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.10 Symbol.replace
Symbol.replaceの初期値は、既知シンボル@@replaceです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.11 Symbol.search
Symbol.searchの初期値は、既知シンボル@@searchです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.12 Symbol.species
Symbol.speciesの初期値は、既知シンボル@@speciesです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.13 Symbol.split
Symbol.splitの初期値は、既知シンボル@@splitです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.14 Symbol.toPrimitive
Symbol.toPrimitiveの初期値は、既知シンボル@@toPrimitiveです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.15 Symbol.toStringTag
Symbol.toStringTagの初期値は、既知シンボル@@toStringTagです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.2.16 Symbol.unscopables
Symbol.unscopablesの初期値は、既知シンボル@@unscopablesです(表1)。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.4.3 Symbolプロトタイプオブジェクトのプロパティ(Properties of the Symbol Prototype Object)
Symbolプロトタイプオブジェクトは、次のような特徴があります。
- 組み込みオブジェクト%SymbolPrototype%です。
- 通常のオブジェクト です。
- Symbolインスタンスではありません。[[SymbolData]]内部スロットがありません。
- [[Prototype]]内部スロットがあり、値は%Object.prototype%です。
抽象操作thisSymbolValue(value)は、次の手順を実行します。
19.4.3.1 Symbol.prototype.constructor
Symbol.prototype.constructorの初期値は%Symbol%です。
19.4.3.2 get Symbol.prototype.description
Symbol.prototype.descriptionはアクセサプロパティで、setアクセサー関数がundefinedです。 Symbol.prototype.descriptionのgetアクセサー関数は、次の手順を実行します。
- this値 を s とする
- ? thisSymbolValue(s) を sym とする
- sym.[[Description]] を返す
19.4.3.3 Symbol.prototype.toString ( )
次の手順が実行されます。
- ? thisSymbolValue(this値) を sym とする
- SymbolDescriptiveString(sym) を返す
19.4.3.3.1 ランタイムセマンティクス(Runtime Semantics): SymbolDescriptiveString ( sym )
抽象演算SymbolDescriptiveStringが引数symを指定して呼び出されると、次の手順が実行されます。
19.4.3.4 Symbol.prototype.valueOf ( )
次の手順が実行されます。
- ? thisSymbolValue(this値) を返す
19.4.3.5 Symbol.prototype [ @@toPrimitive ] ( hint )
ヒント文字列
この関数は、Symbolオブジェクトをプリミティブ値に変換するためにECMAScript言語演算子によって呼び出されます。 hintに許可される値は、"default"、 "number"、"string"です。
@@toPrimitiveメソッドが引数hintを指定して呼び出されると、次の手順が実行されます。
- ? thisSymbolValue(this値) を返す
この関数の"name"プロパティの値は"[Symbol.toPrimitive]"です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。
19.4.3.6 Symbol.prototype [ @@toStringTag ]
@@toStringTagプロパティの初期値は、文字列値"Symbol"です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}です。
19.4.4 Symbolインスタンスのプロパティ(Properties of Symbol Instances)
Symbolインスタンスは、Symbolプロトタイプオブジェクトからプロパティを継承する通常のオブジェクトです。 Symbolインスタンスには[[SymbolData]]内部スロットがあります。 [[SymbolData]]内部スロットには、Symbolオブジェクトで表されるSymbol値が格納されています。
19.5 Errorオブジェクト(Error Objects)
Errorオブジェクトのインスタンスは、ランタイムエラー発生時に例外としてスローされます。 Errorオブジェクトは、ユーザー定義の例外クラスの基本オブジェクトとしても機能することがあります。
19.5.1 Errorコンストラクター(The Error Constructor)
Errorコンストラクターは、次のような特徴があります。
- 組み込みオブジェクト%Error%です。
- グローバルオブジェクトの"Error"プロパティの初期値です。
- コンストラクターとしてではなく関数として呼び出されると、新しいErrorオブジェクトを作成して初期化します。 したがって、関数呼び出しError(…) は、同じ引数を持つオブジェクト作成式new Error(…)と同等です。
- サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。 サブクラスコンストラクターは、[[ErrorData]]内部スロットとサブクラスインスタンスを作成および初期化するために、Errorコンストラクターへのsuperコールを含める必要があります。
19.5.1.1 Error ( message )
引数messageを指定してError関数を呼び出すと、次の手順が実行されます。
- NewTarget が undefined なら アクティブ関数オブジェクトを、 異なるなら、 NewTarget を newTarget とする
- ? OrdinaryCreateFromConstructor(newTarget, %Error.prototype%, « [[ErrorData]] ») を O とする
- message が undefined でないなら、
- ? ToString(message) を msg とする
- PropertyDescriptor型 { [[Value]]: msg, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } を msgDesc とする
- ! DefinePropertyOrThrow(O, "message", msgDesc) を実行する
- O を返す
19.5.2 Errorコンストラクターのプロパティ(Properties of the Error Constructor)
Errorコンストラクターは、次のような特徴があります。
- [[Prototype]]内部スロットがあり、値は%Function.prototype%です。
- 次のプロパティがあります。
19.5.2.1 Error.prototype
Error.prototypeの初期値は%Error.prototype%です。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.5.3 Errorプロトタイプオブジェクトのプロパティ(Properties of the Error Prototype Object)
Errorプロトタイプオブジェクトは、次のような特徴があります。
- 組み込みオブジェクト%ErrorPrototype%です。
- 通常のオブジェクトです。
- Errorインスタンスではありません。[[ErrorData]]内部スロットがありません。
- [[Prototype]]内部スロットがあり、値は%Object.prototype%です。
19.5.3.1 Error.prototype.constructor
Error.prototype.constructorの初期値は%Error%です。
19.5.3.2 Error.prototype.message
Error.prototype.messageの初期値は空の文字列です。
19.5.3.3 Error.prototype.name
Error.prototype.nameの初期値は"Error"です。
19.5.3.4 Error.prototype.toString ( )
次の手順が実行されます。
- this値 を O とする
- Type(O) が Object型 でないなら、TypeError例外をスローする
- ? Get(O, "name") を name とする
- name が undefined なら "Error" を、異なるなら ? ToString(name) を name にセットする
- ? Get(O, "message") を msg とする
- msg が undefined, なら empty String を、異なるなら ? ToString(msg) を msg にセットする
- name が empty String なら、 msg を返す
- msg が empty String なら、 name を返す
- name と コードユニット 0x003A (COLON) と コードユニット 0x0020 (SPACE) と msg の文字列連結を返す
19.5.4 Errorインスタンスのプロパティ(Properties of Error Instances)
Errorインスタンスは、通常のオブジェクトです。Errorプロトタイプオブジェクトからプロパティを継承し、値がundefinedの[[ErrorData]]内部スロットを持ちます。 [[ErrorData]]の唯一の使用法は、ErrorインスタンスとNativeErrorインスタンスをObject.prototype.toString内のエラーオブジェクトとして識別することです。
19.5.5 この規格で使用されるNative Error型(Native Error Types Used in This Standard)
ランタイムエラーが検出されると、以下で複数挙げているNativeErrorオブジェクトのいずれかの新規インスタンスがスローされます。 19.5.6で説明されているように、これらのオブジェクトはすべて同じ構造を共有します。
19.5.5.1 EvalError
この例外は現在、この仕様では使用されていません。 このオブジェクトは、この仕様の以前のエディションとの互換性のために残されています。
19.5.5.2 RangeError
許容できない値の設定または範囲外の値を示します。
19.5.5.3 ReferenceError
無効な参照値が検出されたことを示します。
19.5.5.4 SyntaxError
解析エラーが発生したことを示します。
19.5.5.5 TypeError
TypeErrorは、他の失敗の原因に当たらない場合に、失敗した操作を示すために使用されます。
19.5.5.6 URIError
グローバルURI処理関数の1つが、その定義と互換性のない方法で使用されたことを示します。
19.5.6 NativeErrorオブジェクト構造(NativeError Object Structure)
ECMAScript実装は、ランタイムエラーを検出すると、19.5.5で定義されているNativeErrorオブジェクトのうち適切な新規インスタンスをスローします。 各オブジェクトの構造は以下のとおりです。コンストラクター名として使用される名前、プロトタイプオブジェクトの"name"プロパティ、およびプロトタイプオブジェクトの"message"プロパティ(実装定義)のみが異なります。
エラーオブジェクトごとに、定義内のNativeErrorへの参照を、19.5.5の適切なエラーオブジェクト名に置き換える必要があります。
19.5.6.1 NativeErrorコンストラクター(The NativeError Constructors)
NativeErrorコンストラクターは、次のような特徴があります。
- コンストラクターではなく関数として呼び出されると、新しいNativeErrorオブジェクトを作成して初期化します。 したがって、関数呼び出しNativeError(…) は、同じ引数を持つオブジェクト作成式new NativeError(…)と同等です。
- サブクラス化できるように設計されています。 クラス定義のextends句の値として使用できます。 サブクラスコンストラクターには、[[ErrorData]]内部スロットとサブクラスインスタンスを作成および初期化するために、NativeErrorコンストラクターへのsuperコールを含める必要があります。
19.5.6.1.1 NativeError ( message )
NativeError関数が引数messageとともに呼び出されると、次の手順が実行されます。
- NewTarget が undefined ならアクティブ関数オブジェクト を、異なるなら NewTarget を newTarget とする
- ? OrdinaryCreateFromConstructor(newTarget, "%NativeError.prototype%", « [[ErrorData]] ») を O とする
- message が undefined でないなら、
- ? ToString(message) を msg とする
- PropertyDescriptor型 { [[Value]]: msg, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } を msgDesc とする
- ! DefinePropertyOrThrow(O, "message", msgDesc) を実行する
- O を返す
手順2で渡す文字列の実際の値は、"%EvalError.prototype%"、 "%RangeError.prototype%"、 "%ReferenceError.prototype%"、 "%SyntaxError.prototype%"、 "%TypeError.prototype%"、"%URIError.prototype%" のいずれかです。
19.5.6.2 NativeErrorコンストラクターのプロパティ(Properties of the NativeError Constructors)
NativeErrorコンストラクターは、次のような特徴があります。
- [[Prototype]]内部スロットがあり、値は%Error%です。
- "name"プロパティがあり、値は文字列値"NativeError"です。
- 次のプロパティがあります。
19.5.6.2.1 NativeError.prototype
NativeError.prototypeの初期値は、NativeErrorプロトタイプオブジェクト(19.5.6.3)です。 各NativeErrorコンストラクターには、個別のプロトタイプオブジェクトがあります。
このプロパティの属性は{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}です。
19.5.6.3 NativeErrorプロトタイプオブジェクトのプロパティ(Properties of the NativeError Prototype Objects)
NativeErrorプロトタイプオブジェクトは、次のような特徴があります。
- 通常のオブジェクトです。
- Errorインスタンスではありません。[[ErrorData]]内部スロットがありません。
- [[Prototype]]内部スロットがあり、値は%Error.prototype%です。
19.5.6.3.1 NativeError.prototype.constructor
NativeErrorコンストラクターのプロトタイプの"constructor" プロパティの初期値は、対応する組み込みオブジェクト%NativeError%(19.5.6.1)です。
19.5.6.3.2 NativeError.prototype.message
NativeErrorコンストラクターのプロトタイプの"message"プロパティの初期値は空の文字列です。
19.5.6.3.3 NativeError.prototype.name
NativeErrorコンストラクターのプロトタイプの"name"プロパティの初期値は、コンストラクターの名前(NativeErrorの代わりに使用される名前)で構成される文字列値です。
19.5.6.4 NativeErrorインスタンスのプロパティ(Properties of NativeError Instances)
NativeErrorインスタンスは、通常のオブジェクトです。NativeErrorプロトタイプオブジェクトからプロパティを継承し、値がundefinedの[[ErrorData]]内部スロットを持ちます。 [[ErrorData]]の唯一の使用法は、Object.prototype.toString(19.1.3.6)が、ErrorまたはNativeErrorインスタンスを識別します。