Define Memoized Property

    Define a memoized object property.

    Usage

    var defineMemoizedProperty = require( '@stdlib/utils/define-memoized-property' );
    

    defineMemoizedProperty( obj, prop, descriptor )

    Defines a memoized object property.

    var obj = {};
    
    function foo() {
        return 'bar';
    }
    
    defineMemoizedProperty( obj, 'foo', {
        'configurable': false,
        'enumerable': true,
        'writable': false,
        'value': foo
    });
    
    var v = obj.foo;
    // returns 'bar'
    

    A property descriptor has the following required properties:

    • value: synchronous function whose return value will be memoized and set as the property value.

    A property descriptor has the following optional properties:

    • configurable: boolean indicating if property descriptor can be changed and if the property can be deleted from the provided object. Default: false.
    • enumerable: boolean indicating if the property shows up when enumerating object properties. Default: false.
    • writable: boolean indicating if the value associated with the property can be changed with an assignment operator. Default: false.

    Notes

    • Until deferred evaluation, an object property is configurable.

    Examples

    var fibonacci = require( '@stdlib/math/base/special/fibonacci' );
    var defineMemoizedProperty = require( '@stdlib/utils/define-memoized-property' );
    
    function Foo() {
        var self;
        if ( !(this instanceof Foo) ) {
            return new Foo();
        }
        self = this;
        this.count = 0;
        defineMemoizedProperty( this, 'fibo', {
            'value': fibo
        });
        return this;
    
        function fibo() {
            self.count += 1;
            return fibonacci( 73 );
        }
    }
    
    var foo = new Foo();
    
    var i;
    for ( i = 0; i < 10; i++ ) {
        console.log( 'F: %d. Count: %d.', foo.fibo, foo.count );
    }