28.1 The Reflect Object
The Reflect object:
- is %Reflect%.
- is the initial value of the "Reflect" property of the global object.
- is an ordinary object.
- has a [[Prototype]] internal slot whose value is %Object.prototype%.
- is not a function object.
- does not have a [[Construct]] internal method; it cannot be used as a constructor with the
new
operator.
- does not have a [[Call]] internal method; it cannot be invoked as a function.
28.1.1 Reflect.apply ( target, thisArgument, argumentsList )
When the apply
function is called with arguments target, thisArgument, and argumentsList, the following steps are taken:
- If IsCallable(target) is false, throw a TypeError exception.
- Let args be ? CreateListFromArrayLike(argumentsList).
- Perform PrepareForTailCall().
- Return ? Call(target, thisArgument, args).
28.1.2 Reflect.construct ( target, argumentsList [ , newTarget ] )
When the construct
function is called with arguments target, argumentsList, and newTarget, the following steps are taken:
- If IsConstructor(target) is false, throw a TypeError exception.
- If newTarget is not present, set newTarget to target.
- Else if IsConstructor(newTarget) is false, throw a TypeError exception.
- Let args be ? CreateListFromArrayLike(argumentsList).
- Return ? Construct(target, args, newTarget).
28.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
When the defineProperty
function is called with arguments target, propertyKey, and attributes, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Let key be ? ToPropertyKey(propertyKey).
- Let desc be ? ToPropertyDescriptor(attributes).
- Return ? target.[[DefineOwnProperty]](key, desc).
28.1.4 Reflect.deleteProperty ( target, propertyKey )
When the deleteProperty
function is called with arguments target and propertyKey, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Let key be ? ToPropertyKey(propertyKey).
- Return ? target.[[Delete]](key).
28.1.5 Reflect.get ( target, propertyKey [ , receiver ] )
When the get
function is called with arguments target, propertyKey, and receiver, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Let key be ? ToPropertyKey(propertyKey).
- If receiver is not present, then
- Set receiver to target.
- Return ? target.[[Get]](key, receiver).
28.1.6 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
When the getOwnPropertyDescriptor
function is called with arguments target and propertyKey, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Let key be ? ToPropertyKey(propertyKey).
- Let desc be ? target.[[GetOwnProperty]](key).
- Return FromPropertyDescriptor(desc).
28.1.7 Reflect.getPrototypeOf ( target )
When the getPrototypeOf
function is called with argument target, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Return ? target.[[GetPrototypeOf]]().
28.1.8 Reflect.has ( target, propertyKey )
When the has
function is called with arguments target and propertyKey, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Let key be ? ToPropertyKey(propertyKey).
- Return ? target.[[HasProperty]](key).
28.1.9 Reflect.isExtensible ( target )
When the isExtensible
function is called with argument target, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Return ? target.[[IsExtensible]]().
28.1.10 Reflect.ownKeys ( target )
When the ownKeys
function is called with argument target, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Let keys be ? target.[[OwnPropertyKeys]]().
- Return CreateArrayFromList(keys).
28.1.11 Reflect.preventExtensions ( target )
When the preventExtensions
function is called with argument target, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Return ? target.[[PreventExtensions]]().
28.1.12 Reflect.set ( target, propertyKey, V [ , receiver ] )
When the set
function is called with arguments target, V, propertyKey, and receiver, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- Let key be ? ToPropertyKey(propertyKey).
- If receiver is not present, then
- Set receiver to target.
- Return ? target.[[Set]](key, V, receiver).
28.1.13 Reflect.setPrototypeOf ( target, proto )
When the setPrototypeOf
function is called with arguments target and proto, the following steps are taken:
- If Type(target) is not Object, throw a TypeError exception.
- If Type(proto) is not Object and proto is not null, throw a TypeError exception.
- Return ? target.[[SetPrototypeOf]](proto).
28.1.14 Reflect [ @@toStringTag ]
The initial value of the @@toStringTag property is the String value "Reflect".
This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
28.3 Module Namespace Objects
A Module Namespace Object is a module namespace exotic object that provides runtime property-based access to a module's exported bindings. There is no constructor function for Module Namespace Objects. Instead, such an object is created for each module that is imported by an ImportDeclaration that contains a NameSpaceImport.
In addition to the properties specified in 10.4.6 each Module Namespace Object has the following own property:
28.3.1 @@toStringTag
The initial value of the @@toStringTag property is the String value "Module".
This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.