Bu soyut işlem, canlılığı (liveness) kısa ve öz bir şekilde tanımlamayı mümkün kılmak amacıyla kesinlikle WeakRef.prototype.deref metodundan ayrı olarak tanımlanmıştır.
# 26.1.5 WeakRef Örneklerinin Özellikleri (Properties of WeakRef Instances)
WeakRef örnekleri, WeakRef prototip nesnesinden (WeakRef prototype object) özellikleri miras alan sıradan nesnelerdir (ordinary objects) . WeakRef örnekleri ayrıca bir [[WeakRefTarget]] dahili yuvasına sahiptir.
# 26.2 FinalizationRegistry Nesneleri (FinalizationRegistry Objects)
Bir FinalizationRegistry , hedef nesneler ve semboller çöp toplama (garbage collection) işlemine tabi tutulduğunda gerçekleştirilen temizleme işlemlerinin kaydedilmesini ve kaydının silinmesini yöneten bir nesnedir.
# 26.2.1 FinalizationRegistry Yapıcısı (The FinalizationRegistry Constructor)
FinalizationRegistry yapıcısı (constructor) :
%FinalizationRegistry% nesnesidir.
global nesnenin (global object) "FinalizationRegistry" özelliğinin ilk değeridir.
bir yapıcı (constructor) olarak çağrıldığında yeni bir FinalizationRegistry oluşturur ve başlatır.
fonksiyon olarak çağrılması amaçlanmamıştır ve bu şekilde çağrıldığında bir istisna fırlatır.
bir sınıf tanımının extends ifadesinin değeri olarak kullanılabilir. Belirtilen FinalizationRegistry davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors) , alt sınıf örneğini FinalizationRegistry.prototype yerleşik metotlarını desteklemek için gerekli dahili durumla oluşturmak ve başlatmak için FinalizationRegistry yapıcısına (constructor) bir super çağrısı içermelidir.
# 26.2.1.1 FinalizationRegistry ( cleanupCallback )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer NewTarget undefined ise, bir TypeError istisnası fırlat.
Eğer IsCallable (cleanupCallback ) false ise, bir TypeError istisnası fırlat.
finalizationRegistry , ? OrdinaryCreateFromConstructor (NewTarget, "%FinalizationRegistry.prototype%", « [[Realm]] , [[CleanupCallback]] , [[Cells]] ») olsun.
func , etkin fonksiyon nesnesi (active function object) olsun.
finalizationRegistry .[[Realm]] değerini func .[[Realm]] olarak ayarla.
finalizationRegistry .[[CleanupCallback]] değerini HostMakeJobCallback (cleanupCallback ) olarak ayarla.
finalizationRegistry .[[Cells]] değerini yeni ve boş bir Liste (List) olarak ayarla.
finalizationRegistry döndür.
# 26.2.2 FinalizationRegistry Yapıcısının Özellikleri (Properties of the FinalizationRegistry Constructor)
FinalizationRegistry yapıcısı (constructor) :
# 26.2.2.1 FinalizationRegistry.prototype
FinalizationRegistry.prototype özelliğinin ilk değeri FinalizationRegistry prototip nesnesidir (FinalizationRegistry prototype object) .
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : false } özniteliklerine sahiptir.
# 26.2.3 FinalizationRegistry Prototip Nesnesinin Özellikleri (Properties of the FinalizationRegistry Prototype Object)
FinalizationRegistry prototip nesnesi:
# 26.2.3.1 FinalizationRegistry.prototype.constructor
FinalizationRegistry.prototype.constructor özelliğinin ilk değeri %FinalizationRegistry% yapıcısıdır.
# 26.2.3.2 FinalizationRegistry.prototype.register ( target , heldValue [ , unregisterToken ] )
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
finalizationRegistry , this değeri olsun.
? RequireInternalSlot (finalizationRegistry , [[Cells]] ) işlemini gerçekleştir.
Eğer CanBeHeldWeakly (target ) false ise, bir TypeError istisnası fırlat.
Eğer SameValue (target , heldValue ) true ise, bir TypeError istisnası fırlat.
Eğer CanBeHeldWeakly (unregisterToken ) false ise, o zaman
Eğer unregisterToken undefined değilse, bir TypeError istisnası fırlat.
unregisterToken değerini empty olarak ayarla.
cell , { [[WeakRefTarget]] : target , [[HeldValue]] : heldValue , [[UnregisterToken]] : unregisterToken } Kaydı (Record) olsun.
cell kaydını finalizationRegistry .[[Cells]] listesine ekle.
undefined döndür.
NOT
Bu belirtimdeki algoritmalara ve tanımlara dayanarak, finalizationRegistry .[[Cells]] listesi cell kaydını içerdiğinde cell .[[HeldValue]] değeri canlıdır (live) ; ancak bu, mutlaka cell .[[UnregisterToken]] veya cell .[[Target]] değerlerinin canlı (live) olduğu anlamına gelmez. Örneğin, bir nesneyi kendi kayıt silme belirteci (unregister token) olarak kendisiyle kaydetmek, nesneyi sonsuza kadar canlı tutmayacaktır.
# 26.2.3.3 FinalizationRegistry.prototype.unregister ( unregisterToken )
Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:
finalizationRegistry , this değeri olsun.
? RequireInternalSlot (finalizationRegistry , [[Cells]] ) işlemini gerçekleştir.
Eğer CanBeHeldWeakly (unregisterToken ) false ise, bir TypeError istisnası fırlat.
removed , false olsun.
finalizationRegistry .[[Cells]] listesindeki her bir { [[WeakRefTarget]] , [[HeldValue]] , [[UnregisterToken]] } cell Kaydı (Record) için sırayla yap:
Eğer cell .[[UnregisterToken]] empty değilse ve SameValue (cell .[[UnregisterToken]] , unregisterToken ) true ise, o zaman
cell kaydını finalizationRegistry .[[Cells]] listesinden çıkar.
removed değerini true olarak ayarla.
removed döndür.
# 26.2.3.4 FinalizationRegistry.prototype [ %Symbol.toStringTag% ]
%Symbol.toStringTag%(07_sec-ecmascript-data-types-and-values.md#sec-well-known-symbols) özelliğinin ilk değeri "FinalizationRegistry" dizgisidir.
Bu özellik { [[Writable]] : false, [[Enumerable]] : false, [[Configurable]] : true } özniteliklerine sahiptir.
# 26.2.4 FinalizationRegistry Örneklerinin Özellikleri (Properties of FinalizationRegistry Instances)
FinalizationRegistry örnekleri, FinalizationRegistry prototip nesnesinden (FinalizationRegistry prototype object) özellikleri miras alan sıradan nesnelerdir (ordinary objects) . FinalizationRegistry örnekleri ayrıca [[Cells]] ve [[CleanupCallback]] dahili yuvalarına sahiptir.
← önceki 25 Yapılandırılmış Veri (Structured Data)
sonraki → 27 Kontrol Soyutlama Nesneleri (Control Abstraction Objects)