Extended reflection for Node JS
npm install reflect-jsgetOwnConstructorDescriptor(target: object) => MethodDescriptor`
Gets the MethodDescriptor for the constructor.
Usage:
~~~~
const ReflectExt = require('reflect-js');
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
get birthYear() {
return new Date.getUTCFullYear() - this.age;
}
}
var michael = new Person('Michael', 46);
ReflectExt.getOwnConstructorDescriptor(michael);
/*
MethodDescriptor {
enumerable: false,
configurable: true,
writable: true,
value: [Function: Person],
name: 'constructor',
arguments: [ 'name', 'age' ] }
*/
~~~~
$3
`getOwnDescriptor(target: object, name: string) => Descripitor`
Gets a Descriptor object for the requested field, property or method of the target, or null if the name is not a member of the target.
Usage:
~~~~
const ReflectExt = require('reflect-js');
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
get birthYear() {
return new Date.getUTCFullYear() - this.age;
}
}
var michael = new Person('Michael', 46);
ReflectExt.getOwnDescriptor(michael, 'birthYear');
/*
PropertyDescriptor {
enumerable: false,
configurable: true,
writable: false,
value: undefined,
name: 'birthYear',
readable: true,
getter:
MethodDescriptor {
enumerable: false,
configurable: true,
writable: false,
value: [Function: get birthYear],
name: 'get birthYear',
arguments: [] },
setter: null }
*/
~~~~
$3
`getOwnDescriptors(target: object, methods?: boolean) => Array`
Gets all the Descriptors for the target object. If methods is false, just gets the fields.
Usage:
~~~~
const ReflectExt = require('reflect-js');
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
get birthYear() {
return new Date.getUTCFullYear() - this.age;
}
}
var michael = new Person('Michael', 46);
ReflectExt.getOwnDescriptors(michael);
/*
[ FieldDescriptor {
enumerable: true,
configurable: true,
writable: true,
value: 'Michael',
name: 'name' },
FieldDescriptor {
enumerable: true,
configurable: true,
writable: true,
value: 46,
name: 'age' },
MethodDescriptor {
enumerable: false,
configurable: true,
writable: true,
value: [Function: Person],
name: 'constructor',
arguments: [ 'name', 'age' ] },
PropertyDescriptor {
enumerable: false,
configurable: true,
writable: false,
value: undefined,
name: 'birthYear',
readable: true,
getter:
MethodDescriptor {
enumerable: false,
configurable: true,
writable: false,
value: [Function: get birthYear],
name: 'get birthYear',
arguments: [] },
setter: null } ]
*/
~~~~
$3
`getOwnFieldDescriptors(target: object) => Array`
Gets the FieldDescriptors of the target. It is implemented as:
`getOwnDescriptors(target).filter(descriptor => descriptor instanceof FieldDescriptor)`
See getOwnDescriptors for usage.
$3
`getOwnKeys(target: object, methods?: boolean) => Array`
Gets field names, property names and method names. If methods is missing or
true, inspects the constructor prototype (the class).
Usage:
~~~~
const ReflectExt = require('reflect-js');
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
get birthYear() {
return new Date.getUTCFullYear() - this.age;
}
}
var michael = new Person('Michael', 46);
ReflectExt.getOwnKeys(michael); // => ['name', 'age', 'constructor', 'birthYear']
~~~~
$3
`getOwnMethodDescriptors(target: object) => Array`
Gets the MethodDescriptors of the target. It is implemented as:
`getOwnDescriptors(target).filter(descriptor => descriptor instanceof MethodDescriptor && descriptor.name !== 'constructor')`
See getOwnDescriptors for usage.
$3
`getOwnPropertyDescriptors(target: object) => Array`
Gets the PropertyDescriptors of the target. It is implemented as:
`getOwnDescriptors(target).filter(descriptor => descriptor instanceof PropertyDescriptor)``