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 theinstanceofoperator. The method must return anobjectornull.
- Trap for
setPrototypeOf( target, prototype )- Trap for
Object.setPrototypeOf(). The method must return abooleanindicating 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 anobjectorundefined.
- Trap for
defineProperty( target, property, descriptor )- Trap for
Object.defineProperty(). The method must return abooleanindicating whether the operation succeeded.
- Trap for
has( target, property )- Trap for the
inoperator. 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
booleanindicating whether assignment succeeded.
- Trap for setting property values. The method should return a
deleteProperty( target, property )- Trap for the
deleteoperator. The method must return abooleanindicating 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
newoperator. 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 ] );
}