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

Yansıtma (Reflection)

28.1 Reflect Nesnesi (The Reflect Object)

Reflect nesnesi:

28.1.1 Reflect.apply ( target, thisArg, args )

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

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

  2. argList, ? CreateListFromArrayLike(args) olsun.

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

  4. 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:

  1. Eğer IsConstructor(target) false ise, bir TypeError istisnası fırlat.

  2. Eğer newTarget mevcut değilse, newTarget değerini target olarak ayarla.

  3. Else if IsConstructor(newTarget) false ise, bir TypeError istisnası fırlat.

  4. argList, ? CreateListFromArrayLike(args) olsun.

  5. 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:

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

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. propertyDesc, ? ToPropertyDescriptor(attrs) olsun.

  4. 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:

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

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. 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:

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

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. Eğer receiver mevcut değilse, o zaman

    1. receiver değerini target olarak ayarla.
  4. 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:

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

  2. propertyKey, ? ToPropertyKey(key) olsun.

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

  4. 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:

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

  2. 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:

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

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. 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:

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

  2. 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:

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

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

  3. 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:

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

  2. 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:

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

  2. propertyKey, ? ToPropertyKey(key) olsun.

  3. Eğer receiver mevcut değilse, o zaman

    1. receiver değerini target olarak ayarla.
  4. 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:

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

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

  3. 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:

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

  2. 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:

  1. proxy, ? ProxyCreate(target, handler) olsun.

  2. 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:

    1. activeFunc, etkin fonksiyon nesnesi (active function object) olsun.

    2. p, activeFunc.[[RevocableProxy]] olsun.

    3. Eğer p null ise, NormalCompletion(undefined) döndür.

    4. activeFunc.[[RevocableProxy]] değerini null olarak ayarla.

    5. Assert: p, bir Proxy egzotik nesnesidir (Proxy exotic object).

    6. p.[[ProxyTarget]] değerini null olarak ayarla.

    7. p.[[ProxyHandler]] değerini null olarak ayarla.

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

  3. revoker, CreateBuiltinFunction(revokerClosure, 0, "", « [[RevocableProxy]] ») olsun.

  4. revoker.[[RevocableProxy]] değerini proxy olarak ayarla.

  5. result, OrdinaryObjectCreate(%Object.prototype%) olsun.

  6. ! CreateDataPropertyOrThrow(result, "proxy", proxy) işlemini gerçekleştir.

  7. ! CreateDataPropertyOrThrow(result, "revoke", revoker) işlemini gerçekleştir.

  8. 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.