Object Properties

Property Attributes

Symbols

Getting Property Information

Enumerating Properties

Spying on Objects

Object Methods

Creating or Updating Objects

Preventing Extensions, Sealing, Freezing

Prototypes

Cloning Objects

Constructors and Prototypes

The constructor Property, new.target

Other Object Methods

Function Properties and Methods

Function Properties and Methods

Invoking Methods

Proxies

Proxies

Example: Log Property Access

Revocation

Revocation

The Twelve Traps

get(target, key, receiver) receiver[key], receiver.key
set(target, key, value, receiver) receiver[key] = value, receiver.key = value
deleteProperty(target, property) delete proxy[key], delete proxy.key
has(target, key) key in target
getPrototypeOf(target) Object.getPrototypeOf(proxy)
setPrototypeOf(target, proto) Object.setPrototypeOf(proxy, proto)
isExtensible(target) Object.isExtensible(proxy)
preventExtensions(target) Object.preventExtensions(proxy)
getOwnPropertyDescriptor(target, key) Object.getOwnPropertyDescriptor(proxy, key)
ownKeys(target) Object.keys(proxy) (also calling getOwnPropertyDescriptor), Object.getOwnPropertyProperty(Names|Symbols)(proxy)
defineProperty(target, key, descriptor) Object.defineProperty(proxy, key, descriptor)
apply(target, thisArg, args) thisArg.proxy(...args), proxy(...args), proxy.apply(thisArg, args), proxy.call(thisArg, ...args)
construct(target, args, newTarget) new proxy(args), or invocation through super

Reflect

Log everything

Invariants

Example: Range

Customization With Symbol Properties

Customizing Object.toString

Controlling Primitive Conversion

Species

Other Well-Known Symbols

End of Lesson 8