Yansıtma (Reflection)
28.1 Reflect Nesnesi (The Reflect Object)
Reflect nesnesi:
%Reflect% nesnesidir.
global nesnenin (global object)
"Reflect"özelliğinin ilk değeridir.değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.
bir fonksiyon nesnesi (function object) değildir.
bir [[Construct]] dahili metoduna sahip değildir;
newoperatörü ile bir yapıcı (constructor) olarak kullanılamaz.bir [[Call]] dahili metoduna sahip değildir; bir fonksiyon olarak çağrılamaz.
28.1.1 Reflect.apply ( target, thisArg, args )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer IsCallable(target)
falseise, birTypeErroristisnası fırlat.argList, ? CreateListFromArrayLike(args) olsun.
PrepareForTailCall() işlemini gerçekleştir.
Dönüş değeri: ? Call(target, thisArg, argList).
28.1.2 Reflect.construct ( target, args [ , newTarget ] )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer IsConstructor(target)
falseise, birTypeErroristisnası fırlat.Eğer newTarget mevcut değilse, newTarget değerini target olarak ayarla.
Else if IsConstructor(newTarget)
falseise, birTypeErroristisnası fırlat.argList, ? CreateListFromArrayLike(args) olsun.
Dönüş değeri: ? Construct(target, argList, newTarget).
28.1.3 Reflect.defineProperty ( target, key, attrs )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.propertyKey, ? ToPropertyKey(key) olsun.
propertyDesc, ? ToPropertyDescriptor(attrs) olsun.
Dönüş değeri: ? target.[[DefineOwnProperty]](propertyKey, propertyDesc).
28.1.4 Reflect.deleteProperty ( target, key )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.propertyKey, ? ToPropertyKey(key) olsun.
Dönüş değeri: ? target.[[Delete]](propertyKey).
28.1.5 Reflect.get ( target, key [ , receiver ] )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.propertyKey, ? ToPropertyKey(key) olsun.
Eğer receiver mevcut değilse, o zaman
- receiver değerini target olarak ayarla.
Dönüş değeri: ? target.[[Get]](propertyKey, receiver).
28.1.6 Reflect.getOwnPropertyDescriptor ( target, key )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.propertyKey, ? ToPropertyKey(key) olsun.
propertyDesc, ? target.[[GetOwnProperty]](propertyKey) olsun.
Dönüş değeri: FromPropertyDescriptor(propertyDesc).
28.1.7 Reflect.getPrototypeOf ( target )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.Dönüş değeri: ? target.[[GetPrototypeOf]]().
28.1.8 Reflect.has ( target, key )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.propertyKey, ? ToPropertyKey(key) olsun.
Dönüş değeri: ? target.[[HasProperty]](propertyKey).
28.1.9 Reflect.isExtensible ( target )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.Dönüş değeri: ? target.[[IsExtensible]]().
28.1.10 Reflect.ownKeys ( target )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.keys, ? target.[[OwnPropertyKeys]]() olsun.
Dönüş değeri: CreateArrayFromList(keys).
28.1.11 Reflect.preventExtensions ( target )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.Dönüş değeri: ? target.[[PreventExtensions]]().
28.1.12 Reflect.set ( target, key, value [ , receiver ] )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.propertyKey, ? ToPropertyKey(key) olsun.
Eğer receiver mevcut değilse, o zaman
- receiver değerini target olarak ayarla.
Dönüş değeri: ? target.[[Set]](propertyKey, value, receiver).
28.1.13 Reflect.setPrototypeOf ( target, proto )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer target bir Nesne değilse (is not an Object), bir
TypeErroristisnası fırlat.Eğer proto bir Nesne değilse (is not an Object) ve proto
nulldeğilse, birTypeErroristisnası fırlat.Dönüş değeri: ? target.[[SetPrototypeOf]](proto).
28.1.14 Reflect [ %Symbol.toStringTag% ]
%Symbol.toStringTag% özelliğinin ilk değeri "Reflect" dizesidir.
Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.
28.2 Proxy Nesneleri (Proxy Objects)
28.2.1 Proxy Yapıcısı (The Proxy Constructor)
Proxy yapıcısı (constructor):
%Proxy% nesnesidir.
global nesnenin (global object)
"Proxy"özelliğinin ilk değeridir.bir yapıcı (constructor) olarak çağrıldığında yeni bir Proxy nesnesi oluşturur ve başlatır.
bir fonksiyon olarak çağrılması amaçlanmamıştır ve bu şekilde çağrıldığında bir istisna fırlatır.
28.2.1.1 Proxy ( target, handler )
Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer NewTarget
undefinedise, birTypeErroristisnası fırlat.Dönüş değeri: ? ProxyCreate(target, handler).
28.2.2 Proxy Yapıcısının Özellikleri (Properties of the Proxy Constructor)
Proxy yapıcısı (constructor):
değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.
Proxy nesnelerinin başlatma gerektiren bir [[Prototype]] dahili yuvası olmadığı için bir
"prototype"özelliğine sahip değildir.aşağıdaki özelliklere sahiptir:
28.2.2.1 Proxy.revocable ( target, handler )
Bu fonksiyon iptal edilebilir (revocable) bir Proxy nesnesi oluşturur.
Çağrıldığında aşağıdaki adımları gerçekleştirir:
proxy, ? ProxyCreate(target, handler) olsun.
revokerClosure, hiçbir parametre almayan, hiçbir şey yakalamayan ve çağrıldığında aşağıdaki adımları gerçekleştiren yeni bir Soyut Kapanış (Abstract Closure) olsun:
activeFunc, etkin fonksiyon nesnesi (active function object) olsun.
p, activeFunc.[[RevocableProxy]] olsun.
Eğer p
nullise, NormalCompletion(undefined) döndür.activeFunc.[[RevocableProxy]] değerini
nullolarak ayarla.Assert: p, bir Proxy egzotik nesnesidir (Proxy exotic object).
p.[[ProxyTarget]] değerini
nullolarak ayarla.p.[[ProxyHandler]] değerini
nullolarak ayarla.NormalCompletion(
undefined) döndür.
revoker, CreateBuiltinFunction(revokerClosure, 0,
"", « [[RevocableProxy]] ») olsun.revoker.[[RevocableProxy]] değerini proxy olarak ayarla.
result, OrdinaryObjectCreate(%Object.prototype%) olsun.
! CreateDataPropertyOrThrow(result,
"proxy", proxy) işlemini gerçekleştir.! CreateDataPropertyOrThrow(result,
"revoke", revoker) işlemini gerçekleştir.Return result.
28.3 Modül Ad Alanı Nesneleri (Module Namespace Objects)
Bir Modül Ad Alanı Nesnesi (Module Namespace Object), bir modülün dışa aktarılan bağlarına (exported bindings) çalışma zamanında özellik tabanlı erişim sağlayan bir modül ad alanı egzotik nesnesidir (module namespace exotic object). Modül Ad Alanı Nesneleri için bir yapıcı (constructor) fonksiyonu yoktur. Bunun yerine, böyle bir nesne, bir NameSpaceImport içeren bir ImportDeclaration tarafından içe aktarılan her modül için oluşturulur.
10.4.6 içinde belirtilen özelliklere ek olarak, her Modül Ad Alanı Nesnesi aşağıdaki kendi özelliğine (own property) sahiptir:
28.3.1 %Symbol.toStringTag%
%Symbol.toStringTag% özelliğinin ilk değeri "Module" dizesidir.
Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.