# Define Memoized Property > [Define][mdn-define-property] a memoized object property.
## Usage ```javascript var defineMemoizedProperty = require( '@stdlib/utils/define-memoized-property' ); ``` #### defineMemoizedProperty( obj, prop, descriptor ) [Defines][mdn-define-property] a memoized object property. ```javascript 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 ```javascript 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 ); } ```