function setMemoizedReadOnly( obj, prop, fcn ) {
	if ( !isObject( obj ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be an object. Value: `%s`.', obj ) );
	}
	if ( !isFunction( fcn ) ) {
		throw new TypeError( format( 'invalid argument. Third argument must be a function. Value: `%s`.', fcn ) );
	}
	defineMemoizedProperty( obj, prop, {
		'configurable': false,
		'enumerable': true,
		'writable': false,
		'value': fcn
	});
}
Defines a memoized read-only object property.

## Notes

-   Read-only properties are **enumerable** and **non-configurable**.

@param {Object} obj - object on which to define the property
@param {(string|symbol)} prop - property name
@param {Function} fcn - function whose return value will be memoized and set as the property value
@throws {TypeError} first argument must be an object
@throws {TypeError} third argument must be a function

@example
var obj = {};

function foo() {
    return 'bar';
}

setMemoizedReadOnly( obj, 'foo', foo );

var v = obj.foo;
// returns 'bar'