Özel yöntemler ve erişimciler için değerler, örnekler arasında paylaşılır. Bu işlem, yöntemin veya erişimcinin yeni bir kopyasını oluşturmaz.
#7.3.29 HostEnsureCanAddPrivateElement ( obj )
Konak tanımlı soyut işlem HostEnsureCanAddPrivateElement, obj (bir Object) argümanını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Konak ortamlarının, belirli konak tanımlı egzotik nesnelere özel öğelerin eklenmesini engellemesine izin verir.
HostEnsureCanAddPrivateElement'ın bir gerçekleştirimi aşağıdaki gerekliliklere uymak zorundadır:
HostEnsureCanAddPrivateElement'ın varsayılan gerçekleştirimi, NormalCompletion(unused) döndürmektir.
Bu soyut işlem, yalnızca web tarayıcısı olan ECMAScript konakları tarafından çağrılır.
#7.3.30 PrivateGet ( obj, privateName )
Soyut işlem PrivateGet, obj (bir Object) ve privateName (bir Private Name) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
entry = PrivateElementFind(obj, privateName) olsun.
Eğer entry empty ise, bir TypeError kuraldışı durumu fırlat.
Eğer entry.[[Kind]] field veya method ise, o zaman
- entry.[[Value]] döndür.
Assert: entry.[[Kind]] accessor'dır.
Eğer entry.[[Get]] undefined ise, bir TypeError kuraldışı durumu fırlat.
getter = entry.[[Get]] olsun.
? Call(getter, obj) döndür.
#7.3.31 PrivateSet ( obj, privateName, value )
Soyut işlem PrivateSet, obj (bir Object), privateName (bir Private Name) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
entry = PrivateElementFind(obj, privateName) olsun.
Eğer entry empty ise, bir TypeError kuraldışı durumu fırlat.
Eğer entry.[[Kind]] method ise, bir TypeError kuraldışı durumu fırlat.
Eğer entry.[[Kind]] field ise, o zaman
- entry.[[Value]]'ı value olarak ayarla.
Değilse,
Assert: entry.[[Kind]] accessor'dır.
Eğer entry.[[Set]] undefined ise, bir TypeError kuraldışı durumu fırlat.
setter = entry.[[Set]] olsun.
? Call(setter, obj, « value ») işlemini gerçekleştir.
unused döndür.
#7.3.32 DefineField ( receiver, fieldRecord )
Soyut işlem DefineField, receiver (bir Object) ve fieldRecord (bir ClassFieldDefinition Record) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
fieldName = fieldRecord.[[Name]] olsun.
initializer = fieldRecord.[[Initializer]] olsun.
Eğer initializer empty değilse, o zaman
- initValue = ? Call(initializer, receiver) olsun.
Değilse,
- initValue =
undefined olsun.
Eğer fieldName bir Private Name ise, o zaman
- ? PrivateFieldAdd(receiver, fieldName, initValue) işlemini gerçekleştir.
Değilse,
Assert: fieldName bir özellik anahtarıdır.
? CreateDataPropertyOrThrow(receiver, fieldName, initValue) işlemini gerçekleştir.
unused döndür.
#7.3.33 InitializeInstanceElements ( obj, ctor )
Soyut işlem InitializeInstanceElements, obj (bir Object) ve ctor (bir ECMAScript işlev nesnesi veya yerleşik bir işlev nesnesi) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
methods = ctor.[[PrivateMethods]] olsun.
methods'ın her bir PrivateElement method öğesi için,
- ? PrivateMethodOrAccessorAdd(obj, method) işlemini gerçekleştir.
fields = ctor.[[Fields]] olsun.
fields'ın her bir fieldRecord öğesi için,
- ? DefineField(obj, fieldRecord) işlemini gerçekleştir.
unused döndür.
#7.3.34 AddValueToKeyedGroup ( groups, key, value )
Soyut işlem AddValueToKeyedGroup, groups ([[Key]] (bir ECMAScript dil değeri) ve [[Elements]] (ECMAScript dil değerlerinden oluşan bir Liste) alanlarına sahip Record'lardan oluşan bir Liste), key (bir ECMAScript dil değeri) ve value (bir ECMAScript dil değeri) argümanlarını alır ve unused döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
groups'un her bir { [[Key]], [[Elements]] } group Record'u için,
Eğer SameValue(group.[[Key]], key) true ise, o zaman
Assert: groups'un tam olarak bir öğesi bu ölçütü karşılar.
value'yu group.[[Elements]]'e ekle.
unused döndür.
group, Record { [[Key]]: key, [[Elements]]: « value » } olsun.
group'u groups'a ekle.
unused döndür.
#7.3.35 GroupBy ( items, callback, keyCoercion )
Soyut işlem GroupBy, items (bir ECMAScript dil değeri), callback (bir ECMAScript dil değeri) ve keyCoercion (property veya collection) argümanlarını alır ve ya [[Key]] (bir ECMAScript dil değeri) ve [[Elements]] (ECMAScript dil değerlerinden oluşan bir Liste) alanlarına sahip Record'lardan oluşan bir Liste içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
? RequireObjectCoercible(items) işlemini gerçekleştir.
Eğer IsCallable(callback) false ise, bir TypeError kuraldışı durumu fırlat.
groups, yeni bir boş Liste olsun.
iteratorRecord = ? GetIterator(items, sync) olsun.
k 0 olsun.
Tekrar et,
Eğer k ≥ 253 - 1 ise, o zaman
error = ThrowCompletion(yeni oluşturulmuş bir TypeError nesnesi) olsun.
? IteratorClose(iteratorRecord, error) döndür.
next = ? IteratorStepValue(iteratorRecord) olsun.
Eğer next done ise, o zaman
- groups döndür.
value = next olsun.
key = Completion(Call(callback, undefined, « value, 𝔽(k) »)) olsun.
IfAbruptCloseIterator(key, iteratorRecord).
Eğer keyCoercion property ise, o zaman
key = Completion(ToPropertyKey(key)) olarak ayarla.
IfAbruptCloseIterator(key, iteratorRecord).
Değilse,
Assert: keyCoercion collection'dır.
key = CanonicalizeKeyedCollectionKey(key) olarak ayarla.
AddValueToKeyedGroup(groups, key, value) işlemini gerçekleştir.
k'yi k + 1 olarak ayarla.
#7.3.36 GetOptionsObject ( options )
Soyut işlem GetOptionsObject, options (bir ECMAScript dil değeri) argümanını alır ve ya bir Object içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer options undefined ise, o zaman
- OrdinaryObjectCreate(
null) döndür.
Eğer options bir Object ise, o zaman
- options döndür.
Bir TypeError kuraldışı durumu fırlat.
#7.3.37 SetterThatIgnoresPrototypeProperties ( thisValue, home, propertyKey, value )
Soyut işlem SetterThatIgnoresPrototypeProperties, thisValue (bir ECMAScript dil değeri), home (bir Object), propertyKey (bir özellik anahtarı) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer thisValue bir Object değilse, o zaman
- Bir
TypeError kuraldışı durumu fırlat.
Eğer SameValue(thisValue, home) true ise, o zaman
NOTE: Burada fırlatmak, katı kip kodunda home nesnesi üzerindeki yazılamaz bir veri özelliğine atama yapmayı taklit eder.
Bir TypeError kuraldışı durumu fırlat.
propertyDesc = ? thisValue.[[GetOwnProperty]](propertyKey) olsun.
Eğer propertyDesc undefined ise, o zaman
- ? CreateDataPropertyOrThrow(thisValue, propertyKey, value) işlemini gerçekleştir.
Değilse,
- ? Set(thisValue, propertyKey, value,
true) işlemini gerçekleştir.
unused döndür.
#7.4 Yineleyici Nesneleri Üzerindeki İşlemler
Bkz. Ortak Yineleme Arayüzleri (27.1).
#7.4.1 Yineleyici Kayıtları
Bir Iterator Record, bir iterator veya async iterator ile birlikte next yöntemini kapsüllemek için kullanılan bir Record değeridir.
Iterator Record'ları, Tablo 13'te listelenen alanlara sahiptir.
Tablo 13: Iterator Record Alanları
#7.4.2 GetIteratorDirect ( obj )
Soyut işlem GetIteratorDirect, obj (bir Object) argümanını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
nextMethod = ? Get(obj, "next") olsun.
iteratorRecord, Iterator Record { [[Iterator]]: obj, [[NextMethod]]: nextMethod, [[Done]]: false } olsun.
iteratorRecord döndür.
#7.4.3 GetIteratorFromMethod ( obj, method )
Soyut işlem GetIteratorFromMethod, obj (bir ECMAScript dil değeri) ve method (bir işlev nesnesi) argümanlarını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
iterator = ? Call(method, obj) olsun.
Eğer iterator bir Object değilse, bir TypeError kuraldışı durumu fırlat.
? GetIteratorDirect(iterator) döndür.
#7.4.4 GetIterator ( obj, kind )
Soyut işlem GetIterator, obj (bir ECMAScript dil değeri) ve kind (sync veya async) argümanlarını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer kind async ise, o zaman
method = ? GetMethod(obj, %Symbol.asyncIterator%) olsun.
Eğer method undefined ise, o zaman
syncMethod = ? GetMethod(obj, %Symbol.iterator%) olsun.
Eğer syncMethod undefined ise, bir TypeError kuraldışı durumu fırlat.
syncIteratorRecord = ? GetIteratorFromMethod(obj, syncMethod) olsun.
CreateAsyncFromSyncIterator(syncIteratorRecord) döndür.
Değilse,
- method = ? GetMethod(obj, %Symbol.iterator%) olsun.
Eğer method undefined ise, bir TypeError kuraldışı durumu fırlat.
? GetIteratorFromMethod(obj, method) döndür.
#7.4.5 GetIteratorFlattenable ( obj, primitiveHandling )
Soyut işlem GetIteratorFlattenable, obj (bir ECMAScript dil değeri) ve primitiveHandling (iterate-string-primitives veya reject-primitives) argümanlarını alır ve ya bir Iterator Record içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer obj bir Object değilse, o zaman
Eğer primitiveHandling reject-primitives ise, bir TypeError kuraldışı durumu fırlat.
Assert: primitiveHandling iterate-string-primitives'tir.
Eğer obj bir String değilse, bir TypeError kuraldışı durumu fırlat.
method = ? GetMethod(obj, %Symbol.iterator%) olsun.
Eğer method undefined ise, o zaman
- iterator = obj olsun.
Değilse,
- iterator = ? Call(method, obj) olsun.
Eğer iterator bir Object değilse, bir TypeError kuraldışı durumu fırlat.
? GetIteratorDirect(iterator) döndür.
#7.4.6 IteratorNext ( iteratorRecord [ , value ] )
Soyut işlem IteratorNext, iteratorRecord (bir Iterator Record) argümanını ve isteğe bağlı value (bir ECMAScript dil değeri) argümanını alır ve ya bir Object içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer value mevcut değilse, o zaman
- result = Completion(Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]])) olsun.
Değilse,
- result = Completion(Call(iteratorRecord.[[NextMethod]], iteratorRecord.[[Iterator]], « value »)) olsun.
Eğer result bir throw tamamlanması ise, o zaman
iteratorRecord.[[Done]]'u true olarak ayarla.
? result döndür.
result'ı ! result olarak ayarla.
Eğer result bir Object değilse, o zaman
iteratorRecord.[[Done]]'u true olarak ayarla.
Bir TypeError kuraldışı durumu fırlat.
result döndür.
#7.4.7 IteratorComplete ( iteratorResult )
Soyut işlem IteratorComplete, iteratorResult (bir Object) argümanını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
- ToBoolean(? Get(iteratorResult,
"done")) döndür.
#7.4.8 IteratorValue ( iteratorResult )
Soyut işlem IteratorValue, iteratorResult (bir Object) argümanını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
- ? Get(iteratorResult,
"value") döndür.
#7.4.9 IteratorStep ( iteratorRecord )
Soyut işlem IteratorStep, iteratorRecord (bir Iterator Record) argümanını alır ve ya bir Object veya done içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. iteratorRecord.[[Iterator]]'dan bir sonraki değeri, iteratorRecord.[[NextMethod]]'u çağırarak ister ve iterator'ün sonuna ulaştığını belirten done veya bir sonraki değer mevcutsa IteratorResult nesnesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
result = ? IteratorNext(iteratorRecord) olsun.
done = Completion(IteratorComplete(result)) olsun.
Eğer done bir throw tamamlanması ise, o zaman
iteratorRecord.[[Done]]'u true olarak ayarla.
? done döndür.
done'ı ! done olarak ayarla.
Eğer done true ise, o zaman
iteratorRecord.[[Done]]'u true olarak ayarla.
done döndür.
result döndür.
#7.4.10 IteratorStepValue ( iteratorRecord )
Soyut işlem IteratorStepValue, iteratorRecord (bir Iterator Record) argümanını alır ve ya bir ECMAScript dil değeri veya done içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. iteratorRecord.[[Iterator]]'dan bir sonraki değeri, iteratorRecord.[[NextMethod]]'u çağırarak ister ve iterator'ün sonuna ulaştığını belirten done veya bir sonraki değer mevcutsa IteratorResult nesnesinden değeri döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
result = ? IteratorStep(iteratorRecord) olsun.
Eğer result done ise, o zaman
done döndür.
value = Completion(IteratorValue(result)) olsun.
Eğer value bir throw tamamlanması ise, o zaman
- iteratorRecord.[[Done]]'u
true olarak ayarla.
? value döndür.
#7.4.11 IteratorClose ( iteratorRecord, completion )
Soyut işlem IteratorClose, iteratorRecord (bir Iterator Record) ve completion (bir Completion Record) argümanlarını alır ve bir Completion Record döndürür. Bir iterator'e, tamamlanmış durumuna ulaştığında normalde gerçekleştireceği eylemleri gerçekleştirmesi gerektiğini bildirmek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert: iteratorRecord.[[Iterator]] bir Object'tir.
iterator = iteratorRecord.[[Iterator]] olsun.
innerResult = Completion(GetMethod(iterator, "return")) olsun.
Eğer innerResult bir normal tamamlanma ise, o zaman
return = innerResult.[[Value]] olsun.
Eğer return undefined ise, ? completion döndür.
innerResult = Completion(Call(return, iterator)) olarak ayarla.
Eğer completion bir throw tamamlanması ise, ? completion döndür.
Eğer innerResult bir throw tamamlanması ise, ? innerResult döndür.
Eğer innerResult.[[Value]] bir Object değilse, bir TypeError kuraldışı durumu fırlat.
? completion döndür.
#7.4.12 IteratorCloseAll ( iterators, completion )
Soyut işlem IteratorCloseAll, iterators (Iterator Record'larından oluşan bir Liste) ve completion (bir Completion Record) argümanlarını alır ve bir Completion Record döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:
iterators'ın her bir iterator öğesi için, ters Liste sırasında,
- completion = Completion(IteratorClose(iterator, completion)) olarak ayarla.
? completion döndür.
#7.4.13 IfAbruptCloseIterator ( value, iteratorRecord )
IfAbruptCloseIterator, bir Iterator Record kullanan bir dizi algoritma adımı için bir kısayoldur. Şu biçimdeki bir algoritma adımı:
- IfAbruptCloseIterator(value, iteratorRecord).
şununla aynı anlama gelir:
Assert: value bir Completion Record'dır.
Eğer value bir ani tamamlanma ise, ? IteratorClose(iteratorRecord, value) döndür.
value'yu ! value olarak ayarla.
#7.4.14 IfAbruptCloseIterators ( value, iteratorRecords )
IfAbruptCloseIterators, bir Iterator Record'ları listesi kullanan bir dizi algoritma adımı için bir kısayoldur. Şu biçimdeki bir algoritma adımı:
- IfAbruptCloseIterators(value, iteratorRecords).
şununla aynı anlama gelir:
Assert: value bir Completion Record'dır.
Eğer value bir ani tamamlanma ise, ? IteratorCloseAll(iteratorRecords, value) döndür.
value'yu ! value olarak ayarla.
#7.4.15 AsyncIteratorClose ( iteratorRecord, completion )
Soyut işlem AsyncIteratorClose, iteratorRecord (bir Iterator Record) ve completion (bir Completion Record) argümanlarını alır ve bir Completion Record döndürür. Bir async iterator'e, tamamlanmış durumuna ulaştığında normalde gerçekleştireceği eylemleri gerçekleştirmesi gerektiğini bildirmek için kullanılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert: iteratorRecord.[[Iterator]] bir Object'tir.
iterator = iteratorRecord.[[Iterator]] olsun.
innerResult = Completion(GetMethod(iterator, "return")) olsun.
Eğer innerResult bir normal tamamlanma ise, o zaman
return = innerResult.[[Value]] olsun.
Eğer return undefined ise, ? completion döndür.
innerResult = Completion(Call(return, iterator)) olarak ayarla.
Eğer innerResult bir normal tamamlanma ise, innerResult = Completion(Await(innerResult.[[Value]])) olarak ayarla.
Eğer completion bir throw tamamlanması ise, ? completion döndür.
Eğer innerResult bir throw tamamlanması ise, ? innerResult döndür.
Eğer innerResult.[[Value]] bir Object değilse, bir TypeError kuraldışı durumu fırlat.
? completion döndür.
#7.4.16 IfAbruptCloseAsyncIterator ( value, iteratorRecord )
IfAbruptCloseAsyncIterator, bir Iterator Record kullanan bir dizi algoritma adımı için bir kısayoldur. Şu biçimdeki bir algoritma adımı:
- IfAbruptCloseAsyncIterator(value, iteratorRecord).
şununla aynı anlama gelir:
Assert: value bir Completion Record'dır.
Eğer value bir ani tamamlanma ise, ? AsyncIteratorClose(iteratorRecord, value) döndür.
value'yu ! value olarak ayarla.
#7.4.17 CreateIteratorResultObject ( value, done )
Soyut işlem CreateIteratorResultObject, value (bir ECMAScript dil değeri) ve done (bir Boolean) argümanlarını alır ve IteratorResult arayüzüne uyan bir Object döndürür. IteratorResult arayüzüne uyan bir nesne oluşturur. Çağrıldığında aşağıdaki adımları gerçekleştirir:
obj = OrdinaryObjectCreate(%Object.prototype%) olsun.
! CreateDataPropertyOrThrow(obj, "value", value) işlemini gerçekleştir.
! CreateDataPropertyOrThrow(obj, "done", done) işlemini gerçekleştir.
obj döndür.
#7.4.18 CreateListIteratorRecord ( list )
Soyut işlem CreateListIteratorRecord, list (ECMAScript dil değerlerinden oluşan bir Liste) argümanını alır ve bir Iterator Record döndürür. [[NextMethod]]'u list'in ardışık öğelerini döndüren bir Iterator Record oluşturur. Çağrıldığında aşağıdaki adımları gerçekleştirir:
closure, list'i yakalayan ve çağrıldığında aşağıdaki adımları gerçekleştiren, parametresiz yeni bir Abstract Closure olsun:
list'in her bir value öğesi için,
- ? GeneratorYield(CreateIteratorResultObject(value,
false)) işlemini gerçekleştir.
NormalCompletion(undefined) döndür.
iterator = CreateIteratorFromClosure(closure, empty, %Iterator.prototype%) olsun.
Iterator Record { [[Iterator]]: iterator, [[NextMethod]]: %GeneratorPrototype.next%, [[Done]]: false } döndür.