Proxy
Proxy object.
Usage
var Proxy = require( '@stdlib/proxy/ctor' );
Proxy( target, handlers )
Returns a proxy object implementing custom behavior for specified object operations.
function get( target, property ) {
return target[ property ] * 2.0;
}
var handlers = {
'get': get
};
var p = new Proxy( {}, handlers );
p.a = 3.14;
var v = p.a;
// returns 6.28
A handlers
argument should be an object
whose properties are functions (called "traps") which define the behavior of the proxy when performing operations. The following traps are supported:
getPrototypeOf( target )
- Trap for
Object.getPrototypeOf()
. Can be used to intercept theinstanceof
operator. The method must return anobject
ornull
.
- Trap for
setPrototypeOf( target, prototype )
- Trap for
Object.setPrototypeOf()
. The method must return aboolean
indicating if the prototype was successfully set.
- Trap for
isExtensible( target )
- Trap for
Object.isExtensible()
. The method must return aboolean
.
- Trap for
preventExtensions( target )
- Trap for
Object.preventExtensions()
. The method must return aboolean
.
- Trap for
getOwnPropertyDescriptor( target, property )
- Trap for
Object.getOwnPropertyDescriptor()
. The method must return anobject
orundefined
.
- Trap for
defineProperty( target, property, descriptor )
- Trap for
Object.defineProperty()
. The method must return aboolean
indicating whether the operation succeeded.
- Trap for
has( target, property )
- Trap for the
in
operator. The method must return aboolean
.
- Trap for the
get( target, property, receiver )
- Trap for retrieving property values. The method can return any value.
set( target, property, value, receiver )
- Trap for setting property values. The method should return a
boolean
indicating whether assignment succeeded.
- Trap for setting property values. The method should return a
deleteProperty( target, property )
- Trap for the
delete
operator. The method must return aboolean
indicating whether operation succeeded.
- Trap for the
ownKeys( target )
- Trap for
Object.keys
,Object.getOwnPropertyNames()
, andObject.getOwnPropertySymbols()
. The method must return an enumerableobject
.
- Trap for
apply( target, thisArg, argumentsList )
- Trap for a function call. The method can return any value.
construct( target, argumentsList, newTarget )
- Trap for the
new
operator. The method must return anobject
.
- Trap for the
All traps are optional. If a trap is not defined, the default behavior is to forward the operation to the target.
Examples
var Float64Array = require( '@stdlib/array/float64' );
var Proxy = require( '@stdlib/proxy/ctor' );
var handlers;
var arr;
var p;
var i;
// Create a new typed array:
arr = new Float64Array( 10 );
for ( i = 0; i < arr.length; i++ ) {
arr[ i ] = i;
}
// Define a "trap" when retrieving property values:
function get( obj, prop ) {
if ( prop === 'length' ) {
return obj.length;
}
return obj[ prop ] * 2.0;
}
// Define the proxy handlers:
handlers = {
'get': get
};
// Create a proxy:
p = new Proxy( arr, handlers );
// Access array values...
for ( i = 0; i < p.length; i++ ) {
console.log( 'arr[%d] = %d', i, p[ i ] );
}