← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
20

Temel Nesneler (Fundamental Objects)

20.1 Nesne Nesneleri (Object Objects)

20.1.1 Object Yapıcısı (The Object Constructor)

Object yapıcısı (constructor):

20.1.1.1 Object ( value )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget ne undefined ne de etkin işlev nesnesi (active function object) ise, o halde

    1. Dön döndür: ? OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%").
  2. Eğer value undefined veya null ise, OrdinaryObjectCreate(%Object.prototype%) döndür.

  3. ? ToObject(value) döndür.

20.1.2 Object Yapıcısının Özellikleri (Properties of the Object Constructor)

Object yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki ek özelliklere sahiptir:

20.1.2.1 Object.assign ( target, ...sources )

Bu işlev, bir veya daha fazla kaynak nesneden tüm numaralandırılabilir kendi özelliklerinin (enumerable own properties) değerlerini bir target nesneye kopyalar.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. to, ? ToObject(target) olsun.

  2. Eğer yalnızca tek bir argüman geçirilmişse, to değerini döndür.

  3. sources listesindeki her bir nextSource öğesi için sırayla şunları yap:

    1. Eğer nextSource ne undefined ne de null ise, o halde

      1. from, ! ToObject(nextSource) olsun.

      2. keys, ? from.[[OwnPropertyKeys]]() olsun.

      3. keys listesindeki her bir nextKey öğesi için sırayla şunları yap:

         1. *propertyDesc*, ? *from*.*[[GetOwnProperty]]*(*nextKey*) olsun.
        
         2. Eğer *propertyDesc* `undefined` değilse ve *propertyDesc*.*[[Enumerable]]* değeri `true` ise, o halde
           
                   1. *propertyValue*, ? [Get](08_sec-abstract-operations.md#sec-get-o-p)(*from*, *nextKey*) olsun.
           
                   2. ? [Set](08_sec-abstract-operations.md#sec-set-o-p-v-throw)(*to*, *nextKey*, *propertyValue*, `true`) işlemini gerçekleştir.
  4. to döndür.

Bu işlevin "length" özelliği 2𝔽'dir.

20.1.2.2 Object.create ( proto, properties )

Bu işlev, belirtilen bir prototip ile yeni bir nesne oluşturur.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer proto bir Nesne değilse (is not an Object) ve proto null değilse, bir TypeError istisnası fırlat.

  2. obj, OrdinaryObjectCreate(proto) olsun.

  3. Eğer properties undefined değilse, o halde

    1. ? ObjectDefineProperties(obj, properties) döndür.
  4. obj döndür.

20.1.2.3 Object.defineProperties ( obj, properties )

Bu işlev, bir nesneye kendi özelliklerini (own properties) ekler ve/veya mevcut kendi özelliklerinin özniteliklerini günceller.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), bir TypeError istisnası fırlat.

  2. ? ObjectDefineProperties(obj, properties) döndür.

20.1.2.3.1 ObjectDefineProperties ( obj, properties )

Soyut işlem ObjectDefineProperties; obj (bir Nesne) ve properties (bir ECMAScript dil değeri (ECMAScript language value)) argümanlarını alır ve bir Nesne içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. properties değerini ? ToObject(properties) olarak ayarla.

  2. keys, ? properties.[[OwnPropertyKeys]]() olsun.

  3. propertyDescs, yeni ve boş bir Liste (List) olsun.

  4. keys listesindeki her bir nextKey öğesi için sırayla şunları yap:

    1. currentPropertyDesc, ? properties.[[GetOwnProperty]](nextKey) olsun.

    2. Eğer currentPropertyDesc undefined değilse ve currentPropertyDesc.[[Enumerable]] değeri true ise, o halde

      1. propertyDescObj, ? Get(properties, nextKey) olsun.

      2. propertyDesc, ? ToPropertyDescriptor(propertyDescObj) olsun.

      3. { [[Key]]: nextKey, [[Descriptor]]: propertyDesc } Kaydını (Record) propertyDescs listesine ekle.

  5. propertyDescs listesindeki her bir property öğesi için sırayla şunları yap:

    1. ? DefinePropertyOrThrow(obj, property.[[Key]], property.[[Descriptor]]) işlemini gerçekleştir.
  6. obj döndür.

20.1.2.4 Object.defineProperty ( obj, key, attrs )

Bu işlev, bir nesneye kendi özelliğini (own property) ekler ve/veya mevcut kendi özelliğinin özniteliklerini günceller.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), bir TypeError istisnası fırlat.

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. propertyDesc, ? ToPropertyDescriptor(attrs) olsun.

  4. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) işlemini gerçekleştir.

  5. obj döndür.

20.1.2.5 Object.entries ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, ? ToObject(obj) olsun.

  2. entryList, ? EnumerableOwnProperties(coerced, key+value) olsun.

  3. CreateArrayFromList(entryList) döndür.

20.1.2.6 Object.freeze ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), obj döndür.

  2. status, ? SetIntegrityLevel(obj, frozen) olsun.

  3. Eğer status false ise, bir TypeError istisnası fırlat.

  4. obj döndür.

20.1.2.7 Object.fromEntries ( iterable )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? RequireObjectCoercible(iterable) işlemini gerçekleştir.

  2. obj, OrdinaryObjectCreate(%Object.prototype%) olsun.

  3. Assert: obj, hiçbir kendi özelliğine (own properties) sahip olmayan genişletilebilir bir sıradan nesnedir (ordinary object).

  4. closure, parametreleri (key, value) olan, obj'yi yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:

    1. propertyKey, ? ToPropertyKey(key) olsun.

    2. ! CreateDataPropertyOrThrow(obj, propertyKey, value) işlemini gerçekleştir.

    3. NormalCompletion(undefined) döndür.

  5. adder, CreateBuiltinFunction(closure, 2, "", « ») olsun.

  6. ? AddEntriesFromIterable(obj, iterable, adder) döndür.

20.1.2.8 Object.getOwnPropertyDescriptor ( obj, key )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, ? ToObject(obj) olsun.

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. propertyDesc, ? coerced.[[GetOwnProperty]](propertyKey) olsun.

  4. FromPropertyDescriptor(propertyDesc) döndür.

20.1.2.9 Object.getOwnPropertyDescriptors ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, ? ToObject(obj) olsun.

  2. ownKeys, ? coerced.[[OwnPropertyKeys]]() olsun.

  3. descs, OrdinaryObjectCreate(%Object.prototype%) olsun.

  4. ownKeys listesindeki her bir key öğesi için sırayla şunları yap:

    1. propertyDesc, ? coerced.[[GetOwnProperty]](key) olsun.

    2. propertyDescObj, FromPropertyDescriptor(propertyDesc) olsun.

    3. Eğer propertyDescObj undefined değilse, ! CreateDataPropertyOrThrow(descs, key, propertyDescObj) işlemini gerçekleştir.

  5. descs döndür.

20.1.2.10 Object.getOwnPropertyNames ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. CreateArrayFromList(? GetOwnPropertyKeys(obj, string)) döndür.

20.1.2.11 Object.getOwnPropertySymbols ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. CreateArrayFromList(? GetOwnPropertyKeys(obj, symbol)) döndür.
20.1.2.11.1 GetOwnPropertyKeys ( value, type )

Soyut işlem GetOwnPropertyKeys; value (bir ECMAScript dil değeri (ECMAScript language value)) ve type (string veya symbol) argümanlarını alır ve property anahtarlarının (property keys) bir Listesini (List) içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(value) olsun.

  2. keys, ? obj.[[OwnPropertyKeys]]() olsun.

  3. nameList, yeni ve boş bir Liste (List) olsun.

  4. keys listesindeki her bir nextKey öğesi için sırayla şunları yap:

    1. Eğer nextKey bir Symbol ise (is a Symbol) ve type symbol ise veya nextKey bir Dize ise (is a String) ve type string ise, o halde

      1. nextKey öğesini nameList listesine ekle.
  5. nameList döndür.

20.1.2.12 Object.getPrototypeOf ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, ? ToObject(obj) olsun.

  2. ? coerced.[[GetPrototypeOf]]() döndür.

20.1.2.13 Object.groupBy ( items, callback )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. groups, ? GroupBy(items, callback, property) olsun.

  2. obj, OrdinaryObjectCreate(null) olsun.

  3. groups listesindeki her bir { [[Key]], [[Elements]] } g Kaydı (Record) için sırayla şunları yap:

    1. elements, CreateArrayFromList(g.[[Elements]]) olsun.

    2. ! CreateDataPropertyOrThrow(obj, g.[[Key]], elements) işlemini gerçekleştir.

  4. obj döndür.

20.1.2.14 Object.hasOwn ( obj, key )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, ? ToObject(obj) olsun.

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. ? HasOwnProperty(coerced, propertyKey) döndür.

20.1.2.15 Object.is ( value1, value2 )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. SameValue(value1, value2) döndür.

20.1.2.16 Object.isExtensible ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), false döndür.

  2. ? IsExtensible(obj) döndür.

20.1.2.17 Object.isFrozen ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), true döndür.

  2. ? TestIntegrityLevel(obj, frozen) döndür.

20.1.2.18 Object.isSealed ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), true döndür.

  2. ? TestIntegrityLevel(obj, sealed) döndür.

20.1.2.19 Object.keys ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, ? ToObject(obj) olsun.

  2. keyList, ? EnumerableOwnProperties(coerced, key) olsun.

  3. CreateArrayFromList(keyList) döndür.

20.1.2.20 Object.preventExtensions ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), obj döndür.

  2. status, ? obj.[[PreventExtensions]]() olsun.

  3. Eğer status false ise, bir TypeError istisnası fırlat.

  4. obj döndür.

20.1.2.21 Object.prototype

Object.prototype özelliğinin başlangıç değeri Object prototype nesnesidir (Object prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.1.2.22 Object.seal ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer obj bir Nesne değilse (is not an Object), obj döndür.

  2. status, ? SetIntegrityLevel(obj, sealed) olsun.

  3. Eğer status false ise, bir TypeError istisnası fırlat.

  4. obj döndür.

20.1.2.23 Object.setPrototypeOf ( obj, proto )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? RequireObjectCoercible(obj) işlemini gerçekleştir.

  2. Eğer proto bir Nesne değilse (is not an Object) ve proto null değilse, bir TypeError istisnası fırlat.

  3. Eğer obj bir Nesne değilse (is not an Object), obj döndür.

  4. status, ? obj.[[SetPrototypeOf]](proto) olsun.

  5. Eğer status false ise, bir TypeError istisnası fırlat.

  6. obj döndür.

20.1.2.24 Object.values ( obj )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, ? ToObject(obj) olsun.

  2. valueList, ? EnumerableOwnProperties(coerced, value) olsun.

  3. CreateArrayFromList(valueList) döndür.

20.1.3 Object Prototip Nesnesinin Özellikleri (Properties of the Object Prototype Object)

Object prototip nesnesi:

20.1.3.1 Object.prototype.constructor

Object.prototype.constructor özelliğinin başlangıç değeri %Object% nesnesidir.

20.1.3.2 Object.prototype.hasOwnProperty ( value )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. propertyKey, ? ToPropertyKey(value) olsun.

  2. obj, ? ToObject(this değeri) olsun.

  3. ? HasOwnProperty(obj, propertyKey) döndür.

20.1.3.3 Object.prototype.isPrototypeOf ( value )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer value bir Nesne değilse (is not an Object), false döndür.

  2. obj, ? ToObject(this değeri) olsun.

  3. Tekrarla:

    1. value değerini ? value.[[GetPrototypeOf]]() olarak ayarla.

    2. Eğer value null ise, false döndür.

    3. Eğer SameValue(obj, value) değeri true ise, true döndür.

20.1.3.4 Object.prototype.propertyIsEnumerable ( value )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. propertyKey, ? ToPropertyKey(value) olsun.

  2. obj, ? ToObject(this değeri) olsun.

  3. propertyDesc, ? obj.[[GetOwnProperty]](propertyKey) olsun.

  4. Eğer propertyDesc undefined ise, false döndür.

  5. propertyDesc.[[Enumerable]] değerini döndür.

20.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? Invoke(thisValue, "toString") döndür.

Bu yönteme yönelik isteğe bağlı parametreler kullanılmaz, ancak ECMA-402 toLocaleString yöntemleri tarafından kullanılan parametre desenine karşılık gelmesi amaçlanmıştır. ECMA-402 desteği içermeyen gerçekleştirimler, bu parametre konumlarını başka amaçlar için kullanmamalıdır.

20.1.3.6 Object.prototype.toString ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer this değeri undefined ise, "[object Undefined]" döndür.

  2. Eğer this değeri null ise, "[object Null]" döndür.

  3. obj, ! ToObject(this değeri) olsun.

  4. isArray, ? IsArray(obj) olsun.

  5. Eğer isArray true ise, builtinTag, "Array" olsun.

  6. Değilse, eğer obj bir [[ParameterMap]] dahili yuvasına (internal slot) sahipse, builtinTag, "Arguments" olsun.

  7. Değilse, eğer obj bir [[Call]] dahili yöntemine (internal method) sahipse, builtinTag, "Function" olsun.

  8. Değilse, eğer obj bir [[ErrorData]] dahili yuvasına (internal slot) sahipse, builtinTag, "Error" olsun.

  9. Değilse, eğer obj bir [[BooleanData]] dahili yuvasına (internal slot) sahipse, builtinTag, "Boolean" olsun.

  10. Değilse, eğer obj bir [[NumberData]] dahili yuvasına (internal slot) sahipse, builtinTag, "Number" olsun.

  11. Değilse, eğer obj bir [[StringData]] dahili yuvasına (internal slot) sahipse, builtinTag, "String" olsun.

  12. Değilse, eğer obj bir [[DateValue]] dahili yuvasına (internal slot) sahipse, builtinTag, "Date" olsun.

  13. Değilse, eğer obj bir [[RegExpMatcher]] dahili yuvasına (internal slot) sahipse, builtinTag, "RegExp" olsun.

  14. Değilse, builtinTag, "Object" olsun.

  15. tag, ? Get(obj, %Symbol.toStringTag%) olsun.

  16. Eğer tag bir Dize değilse (is not a String), tag değerini builtinTag olarak ayarla.

  17. "[object ", tag ve "]" değerlerinin dize birleşimini (string-concatenation) döndür.

20.1.3.7 Object.prototype.valueOf ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? ToObject(this değeri) döndür.

Kuralcı İsteğe Bağlı (Normative Optional), Eski Uyumluluk (Legacy)

20.1.3.8 Object.prototype.proto

Object.prototype.__proto__, { [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahip bir erişici özelliktir (accessor property). [[Get]] ve [[Set]] öznitelikleri aşağıdaki gibi tanımlanır:

20.1.3.8.1 get Object.prototype.proto

[[Get]] özniteliğinin değeri, argüman gerektirmeyen yerleşik bir işlevdir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. ? obj.[[GetPrototypeOf]]() döndür.

20.1.3.8.2 set Object.prototype.proto

[[Set]] özniteliğinin değeri, bir proto argümanı alan yerleşik bir işlevdir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? RequireObjectCoercible(thisValue) işlemini gerçekleştir.

  3. Eğer proto bir Nesne değilse (is not an Object) ve proto null değilse, undefined döndür.

  4. Eğer thisValue bir Nesne değilse (is not an Object), undefined döndür.

  5. status, ? thisValue.[[SetPrototypeOf]](proto) olsun.

  6. Eğer status false ise, bir TypeError istisnası fırlat.

  7. undefined döndür.

Kuralcı İsteğe Bağlı (Normative Optional), Eski Uyumluluk (Legacy)

20.1.3.9 Eski Object.prototype Erişim Yöntemleri (Legacy Object.prototype Accessor Methods)

20.1.3.9.1 Object.prototype.defineGetter ( key, getter )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. Eğer IsCallable(getter) değeri false ise, bir TypeError istisnası fırlat.

  3. propertyDesc, PropertyDescriptor { [[Get]]: getter, [[Enumerable]]: true, [[Configurable]]: true } olsun.

  4. propertyKey, ? ToPropertyKey(key) olsun.

  5. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) işlemini gerçekleştir.

  6. undefined döndür.

20.1.3.9.2 Object.prototype.defineSetter ( key, setter )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. Eğer IsCallable(setter) değeri false ise, bir TypeError istisnası fırlat.

  3. propertyDesc, PropertyDescriptor { [[Set]]: setter, [[Enumerable]]: true, [[Configurable]]: true } olsun.

  4. propertyKey, ? ToPropertyKey(key) olsun.

  5. ? DefinePropertyOrThrow(obj, propertyKey, propertyDesc) işlemini gerçekleştir.

  6. undefined döndür.

20.1.3.9.3 Object.prototype.lookupGetter ( key )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. Tekrarla:

    1. propertyDesc, ? obj.[[GetOwnProperty]](propertyKey) olsun.

    2. Eğer propertyDesc undefined değilse, o halde

      1. Eğer IsAccessorDescriptor(propertyDesc) değeri true ise, propertyDesc.[[Get]] değerini döndür.

      2. undefined döndür.

    3. obj değerini ? obj.[[GetPrototypeOf]]() olarak ayarla.

    4. Eğer obj null ise, undefined döndür.

20.1.3.9.4 Object.prototype.lookupSetter ( key )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. Tekrarla:

    1. propertyDesc, ? obj.[[GetOwnProperty]](propertyKey) olsun.

    2. Eğer propertyDesc undefined değilse, o halde

      1. Eğer IsAccessorDescriptor(propertyDesc) değeri true ise, propertyDesc.[[Set]] değerini döndür.

      2. undefined döndür.

    3. obj değerini ? obj.[[GetPrototypeOf]]() olarak ayarla.

    4. Eğer obj null ise, undefined döndür.

20.1.4 Nesne Örneklerinin Özellikleri (Properties of Object Instances)

Nesne örnekleri (object instances), Object prototip nesnesinden (Object prototype object) miras alınan özelliklerin ötesinde hiçbir özel özelliğe sahip değildir.

20.2 İşlev Nesneleri (Function Objects)

20.2.1 Function Yapıcısı (The Function Constructor)

Function yapıcısı (constructor):

  • %Function% nesnesidir.

  • global nesnenin (global object) "Function" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) olarak değil de bir işlev olarak çağrıldığında yeni bir işlev nesnesi (function object) oluşturur ve başlatır. Bu nedenle Function(…) işlev çağrısı, aynı argümanlara sahip new Function(…) nesne oluşturma ifadesine eşdeğerdir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen Function davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), yerleşik işlev davranışı için gerekli olan dahili yuvalara sahip bir alt sınıf örneği oluşturmak ve başlatmak için Function yapıcısına (constructor) bir super çağrısı içermelidir. İşlev nesnelerini (function objects) tanımlayan tüm ECMAScript sözdizimsel biçimleri Function örnekleri oluşturur. Yerleşik GeneratorFunction, AsyncFunction ve AsyncGeneratorFunction alt sınıfları hariç olmak üzere, Function alt sınıflarının örneklerini oluşturmak için sözdizimsel bir araç yoktur.

20.2.1.1 Function ( ...paramArgs, bodyArg )

Son argüman (varsa) bir işlevin gövdesini (yürütülebilir kod) belirtir; önceki tüm argümanlar ise biçimsel parametreleri (formal parameters) belirtir.

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ctor, etkin işlev nesnesi (active function object) olsun.

  2. Eğer bodyArg mevcut değilse, bodyArg değerini boş Dize olarak ayarla.

  3. ? CreateDynamicFunction(ctor, NewTarget, normal, paramArgs, bodyArg) döndür.

20.2.1.1.1 CreateDynamicFunction ( ctor, newTarget, kind, paramArgs, bodyArg )

Soyut işlem CreateDynamicFunction; ctor (bir yapıcı (constructor)), newTarget (bir yapıcı (constructor) veya undefined), kind (normal, generator, async veya async-generator), paramArgs (ECMAScript dil değerlerinin (ECMAScript language values) bir Listesi (List)) ve bodyArg (bir ECMAScript dil değeri (ECMAScript language value)) argümanlarını alır ve bir ECMAScript işlev nesnesi (function object) içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. ctor, bu işlemi gerçekleştiren yapıcı (constructor) işlevidir. newTarget ise new işlecinin başlangıçta uygulandığı yapıcıdır (constructor). paramArgs ve bodyArg, ctor'a geçirilen argüman değerlerini yansıtır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer newTarget undefined ise, newTarget değerini ctor olarak ayarla.

  2. Eğer kind normal ise, o halde

    1. prefix, "function" olsun.

    2. exprGrammar, FunctionExpression dilbilgisi simgesi olsun.

    3. bodyGrammar, FunctionBody[~Yield, ~Await] dilbilgisi simgesi olsun.

    4. paramGrammar, FormalParameters[~Yield, ~Await] dilbilgisi simgesi olsun.

    5. fallbackProto, "%Function.prototype%" olsun.

  3. Değilse, eğer kind generator ise, o halde

    1. prefix, "function*" olsun.

    2. exprGrammar, GeneratorExpression dilbilgisi simgesi olsun.

    3. bodyGrammar, GeneratorBody dilbilgisi simgesi olsun.

    4. paramGrammar, FormalParameters[+Yield, ~Await] dilbilgisi simgesi olsun.

    5. fallbackProto, "%GeneratorFunction.prototype%" olsun.

  4. Değilse, eğer kind async ise, o halde

    1. prefix, "async function" olsun.

    2. exprGrammar, AsyncFunctionExpression dilbilgisi simgesi olsun.

    3. bodyGrammar, AsyncFunctionBody dilbilgisi simgesi olsun.

    4. paramGrammar, FormalParameters[~Yield, +Await] dilbilgisi simgesi olsun.

    5. fallbackProto, "%AsyncFunction.prototype%" olsun.

  5. Değilse,

    1. Assert: kind, async-generator'dır.

    2. prefix, "async function*" olsun.

    3. exprGrammar, AsyncGeneratorExpression dilbilgisi simgesi olsun.

    4. bodyGrammar, AsyncGeneratorBody dilbilgisi simgesi olsun.

    5. paramGrammar, FormalParameters[+Yield, +Await] dilbilgisi simgesi olsun.

    6. fallbackProto, "%AsyncGeneratorFunction.prototype%" olsun.

  6. argCount, paramArgs listesindeki öğe sayısı olsun.

  7. paramStrings, yeni ve boş bir Liste (List) olsun.

  8. paramArgs listesindeki her bir arg öğesi için sırayla şunları yap:

    1. ? ToString(arg) değerini paramStrings listesine ekle.
  9. bodyString, ? ToString(bodyArg) olsun.

  10. currentRealm, mevcut Realm Kaydı (current Realm Record) olsun.

  11. ? HostEnsureCanCompileStrings(currentRealm, paramStrings, bodyString, false) işlemini gerçekleştir.

  12. paramString, boş Dize olsun.

  13. Eğer argCount > 0 ise, o halde

    1. paramString değerini paramStrings[0] olarak ayarla.

    2. k, 1 olsun.

    3. k < argCount iken tekrarla:

      1. nextArgString, paramStrings[k] olsun.

      2. paramString değerini paramString, "," (bir virgül) ve nextArgString değerlerinin dize birleşimi (string-concatenation) olarak ayarla.

      3. k değerini k + 1 olarak ayarla.

  14. bodyParseString, 0x000A (LINE FEED), bodyString ve 0x000A (LINE FEED) değerlerinin dize birleşimi (string-concatenation) olsun.

  15. sourceString, prefix, " anonymous(", paramString, 0x000A (LINE FEED), ") {", bodyParseString ve "}" değerlerinin dize birleşimi (string-concatenation) olsun.

  16. sourceText, StringToCodePoints(sourceString) olsun.

  17. params, ParseText(paramString, paramGrammar) olsun.

  18. Eğer params bir hata Listesi (List) ise, bir SyntaxError istisnası fırlat.

  19. body, ParseText(bodyParseString, bodyGrammar) olsun.

  20. Eğer body bir hata Listesi (List) ise, bir SyntaxError istisnası fırlat.

  21. NOTE: Parametreler ve gövde, her birinin tek başına geçerli olduğundan emin olmak için ayrı ayrı ayrıştırılır. Örneğin, new Function("/*", "*/ ) {") bir işlev olarak değerlendirilmez.

  22. NOTE: Eğer bu adıma ulaşılırsa, sourceText exprGrammar sözdizimine sahip olmalıdır (tersi durum her zaman geçerli olmasa da). Sonraki iki adımın amacı, doğrudan exprGrammar için geçerli olan Erken Hata (Early Error) kurallarını uygulamaktır.

  23. expr, ParseText(sourceText, exprGrammar) olsun.

  24. Eğer expr bir hata Listesi (List) ise, bir SyntaxError istisnası fırlat.

  25. funcProto, ? GetPrototypeFromConstructor(newTarget, fallbackProto) olsun.

  26. envRecord, currentRealm.[[GlobalEnv]] olsun.

  27. privateEnv, null olsun.

  28. func, OrdinaryFunctionCreate(funcProto, sourceText, params, body, non-lexical-this, envRecord, privateEnv) olsun.

  29. SetFunctionName(func, "anonymous") işlemini gerçekleştir.

  30. Eğer kind generator ise, o halde

    1. protoProto, OrdinaryObjectCreate(%GeneratorPrototype%) olsun.

    2. ! DefinePropertyOrThrow(func, "prototype", PropertyDescriptor { [[Value]]: protoProto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  31. Değilse, eğer kind async-generator ise, o halde

    1. protoProto, OrdinaryObjectCreate(%AsyncGeneratorPrototype%) olsun.

    2. ! DefinePropertyOrThrow(func, "prototype", PropertyDescriptor { [[Value]]: protoProto, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) işlemini gerçekleştir.

  32. Değilse, eğer kind normal ise, o halde

    1. MakeConstructor(func) işlemini gerçekleştir.
  33. NOTE: kind değeri async olan işlevler yapılandırılabilir (constructable) değildir ve bir [[Construct]] dahili yöntemine (internal method) ya da bir "prototype" özelliğine sahip değildir.

  34. func döndür.

20.2.2 Function Yapıcısının Özellikleri (Properties of the Function Constructor)

Function yapıcısı (constructor):

20.2.2.1 Function.prototype

Function.prototype özelliğinin değeri Function prototip nesnesidir (Function prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.2.3 Function Prototip Nesnesinin Özellikleri (Properties of the Function Prototype Object)

Function prototip nesnesi:

  • %Function.prototype% nesnesidir.

  • kendisi de yerleşik bir işlev nesnesidir (function object).

  • her türlü argümanı kabul eder ve çağrıldığında undefined döndürür.

  • bir [[Construct]] dahili yöntemine (internal method) sahip değildir; new işleci (operator) ile bir yapıcı (constructor) olarak kullanılamaz.

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • bir "prototype" özelliğine sahip değildir.

  • değeri +0𝔽 olan bir "length" özelliğine sahiptir.

  • değeri boş Dize olan bir "name" özelliğine sahiptir.

20.2.3.1 Function.prototype.apply ( thisArg, argArray )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. func, this değeri olsun.

  2. Eğer IsCallable(func) değeri false ise, bir TypeError istisnası fırlat.

  3. Eğer argArray undefined veya null ise, o halde

    1. PrepareForTailCall() işlemini gerçekleştir.

    2. ? Call(func, thisArg) döndür.

  4. argList, ? CreateListFromArrayLike(argArray) olsun.

  5. PrepareForTailCall() işlemini gerçekleştir.

  6. ? Call(func, thisArg, argList) döndür.

20.2.3.2 Function.prototype.bind ( thisArg, ...args )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. target, this değeri olsun.

  2. Eğer IsCallable(target) değeri false ise, bir TypeError istisnası fırlat.

  3. boundFunc, ? BoundFunctionCreate(target, thisArg, args) olsun.

  4. length, 0 olsun.

  5. targetHasLength, ? HasOwnProperty(target, "length") olsun.

  6. Eğer targetHasLength true ise, o halde

    1. targetLength, ? Get(target, "length") olsun.

    2. Eğer targetLength bir Sayı ise (is a Number), o halde

      1. Eğer targetLength +∞𝔽 ise, o halde

         1. *length* değerini +∞ olarak ayarla.
      2. Değilse, eğer targetLength -∞𝔽 ise, o halde

         1. *length* değerini 0 olarak ayarla.
      3. Değilse,

         1. *targetLengthAsInt*, ! [ToIntegerOrInfinity](08_sec-abstract-operations.md#sec-tointegerorinfinity)(*targetLength*) olsun.
        
         2. [Assert](06_sec-notational-conventions.md#assert): *targetLengthAsInt* [sonludur (finite)](07_sec-ecmascript-data-types-and-values.md#finite).
        
         3. *argCount*, *args* listesindeki öğe sayısı olsun.
        
         4. *length* değerini [max](06_sec-notational-conventions.md#eqn-max)(*targetLengthAsInt* - *argCount*, 0) olarak ayarla.
  7. SetFunctionLength(boundFunc, length) işlemini gerçekleştir.

  8. targetName, ? Get(target, "name") olsun.

  9. Eğer targetName bir Dize değilse (is not a String), targetName değerini boş Dize olarak ayarla.

  10. SetFunctionName(boundFunc, targetName, "bound") işlemini gerçekleştir.

  11. boundFunc döndür.

20.2.3.3 Function.prototype.call ( thisArg, ...args )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. func, this değeri olsun.

  2. Eğer IsCallable(func) değeri false ise, bir TypeError istisnası fırlat.

  3. PrepareForTailCall() işlemini gerçekleştir.

  4. ? Call(func, thisArg, args) döndür.

20.2.3.4 Function.prototype.constructor

Function.prototype.constructor özelliğinin başlangıç değeri %Function% nesnesidir.

20.2.3.5 Function.prototype.toString ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. func, this değeri olsun.

  2. Eğer func bir Nesne ise (is an Object), func bir [[SourceText]] dahili yuvasına (internal slot) sahipse, func.[[SourceText]] Unicode kod noktalarından oluşan bir dizi ise ve HostHasSourceTextAvailable(func) değeri true ise, o halde

    1. CodePointsToString(func.[[SourceText]]) döndür.
  3. Eğer func bir yerleşik işlev nesnesi (built-in function object) ise, func nesnesinin gerçekleştirim tanımlı (implementation-defined) bir Dize kaynak kodu gösterimini döndür. Bu gösterim bir NativeFunction sözdizimine sahip olmalıdır. Ek olarak, eğer func bir [[InitialName]] dahili yuvasına (internal slot) sahipse ve func.[[InitialName]] bir Dize ise (is a String), döndürülen Dizenin NativeFunctionAccessoropt PropertyName ile eşleşecek olan kısmı func.[[InitialName]] olmalıdır.

  4. Eğer func bir Nesne ise (is an Object) ve IsCallable(func) değeri true ise, func nesnesinin gerçekleştirim tanımlı (implementation-defined) bir Dize kaynak kodu gösterimini döndür. Bu gösterim bir NativeFunction sözdizimine sahip olmalıdır.

  5. Bir TypeError istisnası fırlat.

NativeFunction NativeFunction : function NativeFunctionAccessoropt PropertyName[~Yield, ~Await]opt ( FormalParameters[~Yield, ~Await] ) { [ native code ] }

NativeFunctionAccessor NativeFunctionAccessor : get set

20.2.3.6 Function.prototype [ %Symbol.hasInstance% ] ( value )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. thisValue, this değeri olsun.

  2. ? OrdinaryHasInstance(thisValue, value) döndür.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

Bu özellik, bağlı bir işlevin (bound function) hedef işlevini global olarak ifşa etmek için kullanılabilecek müdahaleleri önlemek amacıyla yazılabilir olmayan (non-writable) ve yapılandırılabilir olmayan (non-configurable) bir yapıdadır.

Bu yöntemin "name" özelliğinin değeri "[Symbol.hasInstance]" dizesidir.

20.2.4 İşlev Örnekleri (Function Instances)

Her Function örneği, bir ECMAScript işlev nesnesidir (function object) ve Tablo 25 içinde listelenen dahili yuvalara (internal slots) sahiptir. Function.prototype.bind yöntemi (20.2.3.2) kullanılarak oluşturulan işlev nesneleri (function objects), Tablo 26 içinde listelenen dahili yuvalara sahiptir.

İşlev örnekleri aşağıdaki özelliklere sahiptir:

20.2.4.1 length

"length" özelliğinin değeri, işlev tarafından beklenen tipik argüman sayısını gösteren bir tamsayı Sayıdır (integral Number). Ancak dil, işlevin başka bir sayıda argümanla çağrılmasına izin verir. Bir işlevin, "length" özelliği by belirtilen sayıdan farklı bir sayıda argümanla çağrıldığında sergileyeceği davranış işleve bağlıdır. Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

20.2.4.2 name

"name" özelliğinin değeri, işlevi tanımlayıcı bir Dizedir (is a String). İsmin anlamsal bir önemi yoktur, ancak genellikle ECMAScript kaynak metni (ECMAScript source text) içindeki tanımlanma noktasında işleve atıfta bulunmak için kullanılan bir değişken veya özellik adıdır (property name). Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

Bu şartname tarafından kendileriyle ilişkilendirilmiş bağlamsal bir isme sahip olmayan anonim işlev nesneleri (function objects), "name" özelliğinin değeri olarak boş Dizeyi kullanır.

20.2.4.3 prototype

Bir yapıcı (constructor) olarak kullanılabilen işlev örnekleri bir "prototype" özelliğine sahiptir. Böyle bir Function örneği ne zaman oluşturulsa, başka bir sıradan nesne (ordinary object) de oluşturulur ve işlevin "prototype" özelliğinin başlangıç değeri olur. Aksi belirtilmedikçe, "prototype" özelliğinin değeri, söz konusu işlev bir yapıcı (constructor) olarak çağrıldığında oluşturulan nesnenin [[Prototype]] dahili yuvasını (internal slot) başlatmak için kullanılır.

Bu özellik { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.2.5 HostHasSourceTextAvailable ( func )

Barındırıcı tarafından tanımlanmış (host-defined) soyut işlem HostHasSourceTextAvailable; func (bir işlev nesnesi (function object)) argümanını alır ve bir Boole döndürür. Barındırıcı ortamların (host environments), func için kaynak metnin sağlanmasını engellemesine olanak tanır.

HostHasSourceTextAvailable gerçekleştirimi aşağıdaki gereksinimlere uymalıdır:

  • Parametrelerine göre belirleyici (deterministic) olmalıdır. Argüman olarak belirli bir func ile her çağrıldığında aynı sonucu döndürmelidir.

HostHasSourceTextAvailable soyut işleminin varsayılan gerçekleştirimi true döndürmektir.

20.3 Mantıksal Değer (Boolean) Nesneleri (Boolean Objects)

20.3.1 Boolean Yapıcısı (The Boolean Constructor)

Boolean yapıcısı (constructor):

  • %Boolean% nesnesidir.

  • global nesnenin (global object) "Boolean" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) olarak çağrıldığında yeni bir Boolean nesnesi oluşturur ve başlatır.

  • bir yapıcı (constructor) olarak değil de bir işlev olarak çağrıldığında bir tür dönüşümü gerçekleştirir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen Boolean davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneğini bir [[BooleanData]] dahili yuvası (internal slot) ile oluşturmak ve başlatmak için Boolean yapıcısına (constructor) bir super çağrısı içermelidir.

20.3.1.1 Boolean ( value )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. bool, ToBoolean(value) olsun.

  2. Eğer NewTarget undefined ise, bool döndür.

  3. obj, ? OrdinaryCreateFromConstructor(NewTarget, "%Boolean.prototype%", « [[BooleanData]] ») olsun.

  4. obj.[[BooleanData]] değerini bool olarak ayarla.

  5. obj döndür.

20.3.2 Boolean Yapıcısının Özellikleri (Properties of the Boolean Constructor)

Boolean yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki özelliklere sahiptir:

20.3.2.1 Boolean.prototype

Boolean.prototype özelliğinin başlangıç değeri Boolean prototip nesnesidir (Boolean prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.3.3 Boolean Prototip Nesnesinin Özellikleri (Properties of the Boolean Prototype Object)

Boolean prototip nesnesi:

  • %Boolean.prototype% nesnesidir.

  • bir sıradan nesnedir (ordinary object).

  • kendisi de bir Boolean nesnesidir; değeri false olan bir [[BooleanData]] dahili yuvasına (internal slot) sahiptir.

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

20.3.3.1 Boolean.prototype.constructor

Boolean.prototype.constructor özelliğinin başlangıç değeri %Boolean% nesnesidir.

20.3.3.2 Boolean.prototype.toString ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. bool, ? ThisBooleanValue(this değeri) olsun.

  2. Eğer bool true ise, "true" döndür.

  3. "false" döndür.

20.3.3.3 Boolean.prototype.valueOf ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? ThisBooleanValue(this değeri) döndür.
20.3.3.3.1 ThisBooleanValue ( arg )

Soyut işlem ThisBooleanValue; arg (bir ECMAScript dil değeri (ECMAScript language value)) argümanını alır ve bir Boolean içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Boolean ise (is a Boolean), arg döndür.

  2. Eğer arg bir Nesne ise (is an Object) ve arg bir [[BooleanData]] dahili yuvasına (internal slot) sahipse, o halde

    1. bool, arg.[[BooleanData]] olsun.

    2. Assert: bool bir Boolean'dır (is a Boolean).

    3. bool döndür.

  3. Bir TypeError istisnası fırlat.

20.3.4 Boolean Örneklerinin Özellikleri (Properties of Boolean Instances)

Boolean örnekleri, Boolean prototip nesnesinden (Boolean prototype object) özellikler miras alan sıradan nesnelerdir (ordinary objects). Boolean örnekleri bir [[BooleanData]] dahili yuvasına (internal slot) sahiptir. [[BooleanData]] dahili yuvası, bu Boolean nesnesi tarafından temsil edilen Boolean değeridir.

20.4 Simge (Symbol) Nesneleri (Symbol Objects)

20.4.1 Symbol Yapıcısı (The Symbol Constructor)

Symbol yapıcısı (constructor):

  • %Symbol% nesnesidir.

  • global nesnenin (global object) "Symbol" özelliğinin başlangıç değeridir.

  • bir işlev olarak çağrıldığında yeni bir Symbol değeri döndürür.

  • new işleci ile kullanılmak üzere tasarlanmamıştır.

  • alt sınıflara ayrılmak (subclass) üzere tasarlanmamıştır.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir ama ona yapılacak bir super çağrısı istisnaya neden olur.

20.4.1.1 Symbol ( [ description ] )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined değilse, bir TypeError istisnası fırlat.

  2. Eğer description undefined ise, descString undefined olsun.

  3. Değilse, descString, ? ToString(description) olsun.

  4. [[Description]] değeri descString olan yeni bir Symbol döndür.

20.4.2 Symbol Yapıcısının Özellikleri (Properties of the Symbol Constructor)

Symbol yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki özelliklere sahiptir:

20.4.2.1 Symbol.asyncIterator

Symbol.asyncIterator özelliğinin başlangıç değeri, tanınmış simge %Symbol.asyncIterator% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.2 Symbol.for ( key )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. stringKey, ? ToString(key) olsun.

  2. GlobalSymbolRegistry Listesindeki (GlobalSymbolRegistry List) her bir element öğesi için sırayla şunları yap:

    1. Eğer element.[[Key]] değeri stringKey ise, element.[[Symbol]] döndür.
  3. Assert: GlobalSymbolRegistry Listesi (GlobalSymbolRegistry List) şu anda stringKey için any bir girdi içermemektedir.

  4. newSymbol, [[Description]] değeri stringKey olan yeni bir Symbol olsun.

  5. { [[Key]]: stringKey, [[Symbol]]: newSymbol } GlobalSymbolRegistry Kaydını (Record), GlobalSymbolRegistry Listesine (GlobalSymbolRegistry List) ekle.

  6. newSymbol döndür.

GlobalSymbolRegistry Listesi (GlobalSymbolRegistry List), global olarak kullanılabilen ve yalnızca sonuna ekleme yapılabilen (append-only) bir Listendir (List). Tüm bölgeler (realms) tarafından paylaşılır. Herhangi bir ECMAScript kodunun değerlendirilmesinden önce, yeni ve boş bir Liste (List) olarak başlatılır. GlobalSymbolRegistry Listesi (GlobalSymbolRegistry List) öğeleri, yapısı Tablo 58 içinde tanımlanan Kaydelardır (Records).

Tablo 58: GlobalSymbolRegistry Kaydı (Record) Alanları

Alan Adı Değer Kullanım
[[Key]] bir Dize Bir Symbol'ü küresel olarak tanımlamak için kullanılan dize anahtarı.
[[Symbol]] bir Simge Herhangi bir bölgeden (realm) geri alınabilen simge.

20.4.2.3 Symbol.hasInstance

Symbol.hasInstance özelliğinin başlangıç değeri, tanınmış simge %Symbol.hasInstance% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.4 Symbol.isConcatSpreadable

Symbol.isConcatSpreadable özelliğinin başlangıç değeri, tanınmış simge %Symbol.isConcatSpreadable% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.5 Symbol.iterator

Symbol.iterator özelliğinin başlangıç değeri, tanınmış simge %Symbol.iterator% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.6 Symbol.keyFor ( symbol )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer symbol bir Simge değilse (is not a Symbol), bir TypeError istisnası fırlat.

  2. KeyForSymbol(symbol) döndür.

20.4.2.7 Symbol.match

Symbol.match özelliğinin başlangıç değeri, tanınmış simge %Symbol.match% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.8 Symbol.matchAll

Symbol.matchAll özelliğinin başlangıç değeri, tanınmış simge %Symbol.matchAll% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.9 Symbol.prototype

Symbol.prototype özelliğinin başlangıç değeri Symbol prototip nesnesidir (Symbol prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.10 Symbol.replace

Symbol.replace özelliğinin başlangıç değeri, tanınmış simge %Symbol.replace% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

Symbol.search özelliğinin başlangıç değeri, tanınmış simge %Symbol.search% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.12 Symbol.species

Symbol.species özelliğinin başlangıç değeri, tanınmış simge %Symbol.species% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.13 Symbol.split

Symbol.split özelliğinin başlangıç değeri, tanınmış simge %Symbol.split% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.14 Symbol.toPrimitive

Symbol.toPrimitive özelliğinin başlangıç değeri, tanınmış simge %Symbol.toPrimitive% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.15 Symbol.toStringTag

Symbol.toStringTag özelliğinin başlangıç değeri, tanınmış simge %Symbol.toStringTag% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.2.16 Symbol.unscopables

Symbol.unscopables özelliğinin başlangıç değeri, tanınmış simge %Symbol.unscopables% nesnesidir (Tablo 1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.4.3 Symbol Prototip Nesnesinin Özellikleri (Properties of the Symbol Prototype Object)

Symbol prototip nesnesi:

20.4.3.1 Symbol.prototype.constructor

Symbol.prototype.constructor özelliğinin başlangıç değeri %Symbol% nesnesidir.

20.4.3.2 get Symbol.prototype.description

Symbol.prototype.description, set erişici işlevi (set accessor function) undefined olan bir erişici özelliktir (accessor property). get erişici işlevi çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. symbol, ? ThisSymbolValue(this değeri) olsun.

  2. symbol.[[Description]] değerini döndür.

20.4.3.3 Symbol.prototype.toString ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. symbol, ? ThisSymbolValue(this değeri) olsun.

  2. SymbolDescriptiveString(symbol) döndür.

20.4.3.3.1 SymbolDescriptiveString ( symbol )

Soyut işlem SymbolDescriptiveString; symbol (bir Symbol) argümanını alır ve bir Dize döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. propertyDesc, symbol.[[Description]] olsun.

  2. Eğer propertyDesc undefined ise, propertyDesc değerini boş Dize olarak ayarla.

  3. Assert: propertyDesc bir Dizedir (is a String).

  4. "Symbol(", propertyDesc ve ")" değerlerinin dize birleşimini (string-concatenation) döndür.

20.4.3.4 Symbol.prototype.valueOf ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? ThisSymbolValue(this değeri) döndür.
20.4.3.4.1 ThisSymbolValue ( arg )

Soyut işlem ThisSymbolValue; arg (bir ECMAScript dil değeri (ECMAScript language value)) argümanını alır ve bir Simge içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Simge ise (is a Symbol), arg döndür.

  2. Eğer arg bir Nesne ise (is an Object) ve arg bir [[SymbolData]] dahili yuvasına (internal slot) sahipse, o halde

    1. symbol, arg.[[SymbolData]] olsun.

    2. Assert: symbol bir Simgedir (is a Symbol).

    3. symbol döndür.

  3. Bir TypeError istisnası fırlat.

20.4.3.5 Symbol.prototype [ %Symbol.toPrimitive% ] ( hint )

Bu yöntem, bir Symbol nesnesini ilkel bir değere (primitive value) dönüştürmek için ECMAScript dil işleçleri (language operators) tarafından çağrılır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? ThisSymbolValue(this değeri) döndür.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

Bu yöntemin "name" özelliğinin değeri "[Symbol.toPrimitive]" dizisidir.

20.4.3.6 Symbol.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag% özelliğinin başlangıç değeri "Symbol" Dize değeridir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

20.4.4 Symbol Örneklerinin Özellikleri (Properties of Symbol Instances)

Symbol örnekleri, Symbol prototip nesnesinden (Symbol prototype object) özellikler miras alan sıradan nesnelerdir (ordinary objects). Symbol örnekleri bir [[SymbolData]] dahili yuvasına (internal slot) sahiptir. [[SymbolData]] dahili yuvası, bu Symbol nesnesi tarafından temsil edilen Symbol değeridir.

20.4.5 Simgeler için Soyut İşlemler (Abstract Operations for Symbols)

20.4.5.1 KeyForSymbol ( symbol )

Soyut işlem KeyForSymbol; symbol (bir Symbol) argümanını alır ve bir Dize ya da undefined döndürür. Eğer symbol, GlobalSymbolRegistry Listesi (GlobalSymbolRegistry List) içindeyse, symbol'ü kaydetmek için kullanılan Dize döndürülür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. GlobalSymbolRegistry Listesindeki (GlobalSymbolRegistry List) her bir element öğesi için sırayla şunları yap:

    1. Eğer SameValue(element.[[Symbol]], symbol) değeri true ise, element.[[Key]] döndür.
  2. Assert: GlobalSymbolRegistry Listesi (GlobalSymbolRegistry List) şu anda symbol için herhangi bir girdi içermemektedir.

  3. undefined döndür.

20.5 Hata (Error) Nesneleri (Error Objects)

Çalışma zamanı hataları (runtime errors) oluştuğunda Error nesnelerinin örnekleri istisna olarak fırlatılır. Error nesneleri, kullanıcı tanımlı istisna sınıfları için temel (base) nesneler olarak da hizmet edebilir.

Bir ECMAScript uygulaması çalışma zamanı hatası algıladığında, 20.5.5 içinde tanımlanan NativeError nesnelerinden birinin yeni bir örneğini veya 20.5.7 içinde tanımlanan AggregateError nesnesinin yeni bir örneğini fırlatır.

20.5.1 Error Yapıcısı (The Error Constructor)

Error yapıcısı (constructor):

  • %Error% nesnesidir.

  • global nesnenin (global object) "Error" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) yerine bir işlev olarak çağrıldığında yeni bir Error nesnesi oluşturur ve başlatır. Bu nedenle Error(…) işlev çağrısı, aynı argümanlarla yapılan new Error(…) nesne oluşturma ifadesine eşdeğerdir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen Error davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneklerini bir [[ErrorData]] dahili yuvası (internal slot) ile oluşturmak ve başlatmak için Error yapıcısına (constructor) yapılacak bir super çağrısı içermelidir.

20.5.1.1 Error ( message [ , options ] )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, newTarget etkin işlev nesnesi (active function object) olsun; değilse newTarget NewTarget olsun.

  2. obj, ? OrdinaryCreateFromConstructor(newTarget, "%Error.prototype%", « [[ErrorData]] ») olsun.

  3. Eğer message undefined değilse, o halde

    1. messageString, ? ToString(message) olsun.

    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString) işlemini gerçekleştir.

  4. ? InstallErrorCause(obj, options) işlemini gerçekleştir.

  5. obj döndür.

20.5.2 Error Yapıcısının Özellikleri (Properties of the Error Constructor)

Error yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki özelliklere sahiptir:

20.5.2.1 Error.isError ( arg )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Nesne değilse (is not an Object), false döndür.

  2. Eğer arg bir [[ErrorData]] dahili yuvasına (internal slot) sahip değilse, false döndür.

  3. true döndür.

20.5.2.2 Error.prototype

Error.prototype özelliğinin başlangıç değeri Error prototip nesnesidir (Error prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.5.3 Error Prototip Nesnesinin Özellikleri (Properties of the Error Prototype Object)

Error prototip nesnesi:

  • %Error.prototype% nesnesidir.

  • bir sıradan nesnedir (ordinary object).

  • bir Error örneği değildir ve bir [[ErrorData]] dahili yuvasına (internal slot) sahip değildir.

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

20.5.3.1 Error.prototype.constructor

Error.prototype.constructor özelliğinin başlangıç değeri %Error% nesnesidir.

20.5.3.2 Error.prototype.message

Error.prototype.message özelliğinin başlangıç değeri boş Dizedir.

20.5.3.3 Error.prototype.name

Error.prototype.name özelliğinin başlangıç değeri "Error" dizisidir.

20.5.3.4 Error.prototype.toString ( )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. Eğer obj bir Nesne değilse (is not an Object), bir TypeError istisnası fırlat.

  3. name, ? Get(obj, "name") olsun.

  4. Eğer name undefined ise, name değerini "Error" olarak ayarla; değilse name değerini ? ToString(name) olarak ayarla.

  5. message, ? Get(obj, "message") olsun.

  6. Eğer message undefined ise, message değerini boş Dize olarak ayarla; değilse message değerini ? ToString(message) olarak ayarla.

  7. Eğer name boş Dize ise, message döndür.

  8. Eğer message boş Dize ise, name döndür.

  9. name, 0x003A (COLON) kod birimi (code unit), 0x0020 (SPACE) kod birimi ve message değerlerinin dize birleşimini (string-concatenation) döndür.

20.5.4 Error Örneklerinin Özellikleri (Properties of Error Instances)

Error örnekleri, Error prototip nesnesinden (Error prototype object) özellikler miras alan sıradan nesnelerdir (ordinary objects) ve değeri undefined olan bir [[ErrorData]] dahili yuvasına (internal slot) sahiptirler. [[ErrorData]] yuvasının belirtilen tek kullanımı; Object.prototype.toString ve Error.isError içinde Error, AggregateError ve NativeError örneklerini Error nesneleri olarak tanımlamaktır.

20.5.5 Bu Standartta Kullanılan Yerleşik Hata (Native Error) Türleri (Native Error Types Used in This Standard)

Bir çalışma zamanı hatası algılandığında, aşağıdaki NativeError nesnelerinden birinin yeni bir örneği veya AggregateError nesnesinin yeni bir örneği fırlatılır. Tüm NativeError nesneleri, 20.5.6 içinde açıklandığı gibi aynı yapıyı paylaşır.

20.5.5.1 EvalError

EvalError yapıcısı (constructor) %EvalError% nesnesidir.

Bu istisna şu anda bu belirtim (specification) içinde kullanılmamaktadır. Bu nesne, bu belirtimin önceki sürümleriyle uyumluluk amacıyla korunmaktadır.

20.5.5.2 RangeError

RangeError yapıcısı (constructor) %RangeError% nesnesidir.

İzin verilen değerler kümesinde veya aralığında olmayan bir değeri belirtir.

20.5.5.3 ReferenceError

ReferenceError yapıcısı (constructor) %ReferenceError% nesnesidir.

Geçersiz bir başvurunun (reference) algılandığını belirtir.

20.5.5.4 SyntaxError

SyntaxError yapıcısı (constructor) %SyntaxError% nesnesidir.

Bir ayrıştırma hatasının (parsing error) oluştuğunu belirtir.

20.5.5.5 TypeError

TypeError yapıcısı (constructor) %TypeError% nesnesidir.

TypeError, diğer NativeError nesnelerinin hiçbiri başarısızlık nedeninin uygun bir göstergesi olmadığında, başarısız bir işlemi belirtmek için kullanılır.

20.5.5.6 URIError

URIError yapıcısı (constructor) %URIError% nesnesidir.

Global URI işleme işlevlerinden birinin tanımıyla uyumsuz bir şekilde kullanıldığını belirtir.

20.5.6 NativeError Nesne Yapısı (NativeError Object Structure)

Bu nesnelerin her biri, yalnızca yapıcı (constructor) adı olarak kullanılan adda ve prototip nesnesinin "name" özelliğinde farklılık göstererek aşağıda açıklanan yapıya sahiptir.

Her bir hata nesnesi için, tanımdaki NativeError başvuruları, 20.5.5 içindeki uygun hata nesnesi adı ile değiştirilmelidir.

20.5.6.1 NativeError Yapıcıları (The NativeError Constructors)

Her bir NativeError yapıcısı (constructor):

  • bir yapıcı (constructor) yerine bir işlev olarak çağrıldığında yeni bir NativeError nesnesi oluşturur ve başlatır. Nesnenin bir işlev olarak çağrılması, aynı argümanlarla bir yapıcı olarak çağrılmasına eşdeğerdir. Böylece *NativeError*(…) işlev çağrısı, aynı argümanlarla yapılan new *NativeError*(…) nesne oluşturma ifadesine eşdeğerdir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen NativeError davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneklerini bir [[ErrorData]] dahili yuvası (internal slot) ile oluşturmak ve başlatmak için NativeError yapıcısına (constructor) yapılacak bir super çağrısı içermelidir.

20.5.6.1.1 NativeError ( message [ , options ] )

Her bir NativeError işlevi, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, newTarget etkin işlev nesnesi (active function object) olsun; değilse newTarget NewTarget olsun.

  2. obj, ? OrdinaryCreateFromConstructor(newTarget, "%*NativeError*.prototype%", « [[ErrorData]] ») olsun.

  3. Eğer message undefined değilse, o halde

    1. messageString, ? ToString(message) olsun.

    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString) işlemini gerçekleştir.

  4. ? InstallErrorCause(obj, options) işlemini gerçekleştir.

  5. obj döndür.

Adım 2 içinde geçirilen dizgenin gerçek değeri; hangi NativeError yapıcısının (constructor) tanımlandığına bağlı olarak "%EvalError.prototype%", "%RangeError.prototype%", "%ReferenceError.prototype%", "%SyntaxError.prototype%", "%TypeError.prototype%" veya "%URIError.prototype%" değerlerinden biridir.

20.5.6.2 NativeError Yapıcılarının Özellikleri (Properties of the NativeError Constructors)

Her bir NativeError yapıcısı (constructor):

  • değeri %Error% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • değeri "*NativeError*" Dize değeri olan bir "name" özelliğine sahiptir.

  • aşağıdaki özelliklere sahiptir:

20.5.6.2.1 NativeError.prototype

*NativeError*.prototype özelliğinin başlangıç değeri bir NativeError prototip nesnesidir (20.5.6.3). Her NativeError yapıcısının (constructor) kendine özgü bir prototip nesnesi vardır.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.5.6.3 NativeError Prototip Nesnelerinin Özellikleri (Properties of the NativeError Prototype Objects)

Her bir NativeError prototip nesnesi:

20.5.6.3.1 NativeError.prototype.constructor

Belirli bir NativeError yapıcısının (constructor) prototipi için "constructor" özelliğinin başlangıç değeri yapıcının (constructor) kendisidir.

20.5.6.3.2 NativeError.prototype.message

Belirli bir NativeError yapıcısının (constructor) prototipi için "message" özelliğinin başlangıç değeri boş Dizedir.

20.5.6.3.3 NativeError.prototype.name

Belirli bir NativeError yapıcısının (constructor) prototipi için "name" özelliğinin başlangıç değeri, yapıcının adından (NativeError yerine kullanılan ad) oluşan Dize değeridir.

20.5.6.4 NativeError Örneklerinin Özellikleri (Properties of NativeError Instances)

NativeError örnekleri, kendi NativeError prototip nesnelerinden özellikler miras alan sıradan nesnelerdir (ordinary objects) ve değeri undefined olan bir [[ErrorData]] dahili yuvasına (internal slot) sahiptirler. [[ErrorData]] dahili yuvasının belirtilen tek kullanımı; Object.prototype.toString (20.1.3.6) ve Error.isError (20.5.2.1) tarafından Error, AggregateError veya NativeError örneklerini tanımlamaktır.

20.5.7 AggregateError Nesneleri (AggregateError Objects)

20.5.7.1 AggregateError Yapıcısı (The AggregateError Constructor)

AggregateError yapıcısı (constructor):

  • %AggregateError% nesnesidir.

  • global nesnenin (global object) "AggregateError" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) yerine bir işlev olarak çağrıldığında yeni bir AggregateError nesnesi oluşturur ve başlatır. Bu nedenle AggregateError(…) işlev çağrısı, aynı argümanlarla yapılan new AggregateError(…) nesne oluşturma ifadesine eşdeğerdir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen AggregateError davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneklerini bir [[ErrorData]] dahili yuvası (internal slot) ile oluşturmak ve başlatmak için AggregateError yapıcısına (constructor) yapılacak bir super çağrısı içermelidir.

20.5.7.1.1 AggregateError ( errors, message [ , options ] )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, newTarget etkin işlev nesnesi (active function object) olsun; değilse newTarget NewTarget olsun.

  2. obj, ? OrdinaryCreateFromConstructor(newTarget, "%AggregateError.prototype%", « [[ErrorData]] ») olsun.

  3. Eğer message undefined değilse, o halde

    1. messageString, ? ToString(message) olsun.

    2. CreateNonEnumerableDataPropertyOrThrow(obj, "message", messageString) işlemini gerçekleştir.

  4. ? InstallErrorCause(obj, options) işlemini gerçekleştir.

  5. errorsList, ? IteratorToList(? GetIterator(errors, sync)) olsun.

  6. ! DefinePropertyOrThrow(obj, "errors", PropertyDescriptor { [[Configurable]]: true, [[Enumerable]]: false, [[Writable]]: true, [[Value]]: CreateArrayFromList(errorsList) }) işlemini gerçekleştir.

  7. obj döndür.

20.5.7.2 AggregateError Yapıcısının Özellikleri (Properties of the AggregateError Constructor)

AggregateError yapıcısı (constructor):

  • değeri %Error% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki özelliklere sahiptir:

20.5.7.2.1 AggregateError.prototype

AggregateError.prototype özelliğinin başlangıç değeri %AggregateError.prototype% nesnesidir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

20.5.7.3 AggregateError Prototip Nesnesinin Özellikleri (Properties of the AggregateError Prototype Object)

AggregateError prototip nesnesi:

  • %AggregateError.prototype% nesnesidir.

  • bir sıradan nesnedir (ordinary object).

  • bir Error örneği veya bir AggregateError örneği değildir ve bir [[ErrorData]] dahili yuvasına (internal slot) sahip değildir.

  • değeri %Error.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

20.5.7.3.1 AggregateError.prototype.constructor

AggregateError.prototype.constructor özelliğinin başlangıç değeri %AggregateError% nesnesidir.

20.5.7.3.2 AggregateError.prototype.message

AggregateError.prototype.message özelliğinin başlangıç değeri boş Dizedir.

20.5.7.3.3 AggregateError.prototype.name

AggregateError.prototype.name özelliğinin başlangıç değeri "AggregateError" dizisidir.

20.5.7.4 AggregateError Örneklerinin Özellikleri (Properties of AggregateError Instances)

AggregateError örnekleri, kendi AggregateError prototip nesnelerinden (AggregateError prototype object) özellikler miras alan sıradan nesnelerdir (ordinary objects) ve değeri undefined olan bir [[ErrorData]] dahili yuvasına (internal slot) sahiptirler. [[ErrorData]] dahili yuvasının belirtilen tek kullanımı; Object.prototype.toString (20.1.3.6) ve Error.isError (20.5.2.1) tarafından Error, AggregateError veya NativeError örneklerini tanımlamaktır.

20.5.8 Hata Nesneleri için Soyut İşlemler (Abstract Operations for Error Objects)

20.5.8.1 InstallErrorCause ( obj, options )

Soyut işlem InstallErrorCause; obj (bir Nesne) ve options (bir ECMAScript dil değeri (ECMAScript language value)) argümanlarını alır ve unused içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. options üzerinde bir "cause" özelliği mevcut olduğunda, obj üzerinde bir "cause" özelliği oluşturmak için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer options bir Nesne ise (is an Object) ve ? HasProperty(options, "cause") değeri true ise, o halde

    1. cause, ? Get(options, "cause") olsun.

    2. CreateNonEnumerableDataPropertyOrThrow(obj, "cause", cause) işlemini gerçekleştir.

  2. unused döndür.