UNPKG

@web-native-js/observer

Version:

A simple set of functions for intercepting and observing JavaScript objects and arrays.

110 lines (77 loc) 3.49 kB
# `Observer.deleteProperty()` This method is used to delete an object's property. It corresponds to the JavaScript's `Reflect.deleteProperty()` function, which is itself the programmatic alternative to the assignment expression – `delete obj.property`. `Observer.deleteProperty()` brings the added benefit of triggering [*observers*](/observer/v1/api/observe.md) and [*interceptors*](/observer/v1/api/intercept.md). The `Observer.del()` function is an alias of this function and could be used interchangeably. + [Syntax](#syntax) + [Usage](#usage) + [Usage as a Trap's "deleteProperty" Handler](#usage-as-a-traps-deleteproperty-handler) + [Intercepting `Observer.deleteProperty()`](#Intercepting-observer.deleteproperty) + [Related Methods](#related-methods) ## Syntax ```js // Delete a specific property Observer.deleteProperty(obj, propertyName); // Delete a list of properties Observer.deleteProperty(obj, propertyNames); ``` **Parameters** + `obj` - an object or array. + `propertyNames/propertyName` - the list of properties, or a property, to delete. **Return Value** *Boolean* ## Usage ### ADeleting a Specific Property ```js // On an object Observer.deleteProperty(obj, 'fruit'); // On an array Observer.deleteProperty(arr, 0); ``` ### Deleting a List of Properties ```js // On an object Observer.deleteProperty(obj, ['fruit', 'brand']); // On an array Observer.deleteProperty(arr, [0, 3]); ``` ## Usage as a Trap's "deleteProperty" Handler `Observer.deleteProperty()` can be used as the "deleteProperty" handler in Proxy traps. ```js let _obj = new Proxy(obj, {deleteProperty: Observer.deleteProperty}); let _arr = new Proxy(arr, {deleteProperty: Observer.deleteProperty}); ``` Delete operations will now be forwarded to `Observer.deleteProperty()` and [*observers*](/observer/v1/api/observe.md) and [*interceptors*](/observer/v1/api/intercept.md) that may be bound to the object will continue to respond. ```js delete _obj.fruit; delete _arr[2]; ``` ## Intercepting `Observer.deleteProperty()` Using [`Observer.intercept()`](/observer/v1/api/intercept.md), it is possible to intercept calls to `Observer.deleteProperty()`. When a "del" operation triggers an interceptor, the interceptor will receive an event object containing the property name to delete. ```js Observer.intercept(obj, 'del', (event, recieved, next) => { // What we recieved... console.log(event.name); // The delete operation delete obj[event.name]; // The return value - Boolean return true; }); Observer.deleteProperty(obj, 'fruit'); ``` When the "del" operation is of multiple deletion, the interceptor gets fired for each pair while also recieving the total list of properties as a hint - via `event.related`. ```js Observer.intercept(obj, 'del', (event, recieved, next) => { // What we recieved... console.log(event.name, event.related); // The delete operation delete obj[event.name]; // The return value - Boolean return true; }); Observer.deleteProperty(obj, ['orange', 'apple']); ``` The above should trigger our interceptor twice with `event.related` being `['fruit', 'brand']`. The interceptor is expected to return *true* when the deletion is successful; *false* otherwise. ## Related Methods + [`Observer.observe()`](/observer/v1/api/observe.md) + [`Observer.intercept()`](/observer/v1/api/intercept.md)