can-define-lazy-value
Version:
Define properties with lazy values using Object.defineProperty
28 lines • 975 B
JavaScript
/*can-define-lazy-value@1.1.0#define-lazy-value*/
define('can-define-lazy-value', function (require, exports, module) {
'use strict';
module.exports = function defineLazyValue(obj, prop, initializer, writable) {
Object.defineProperty(obj, prop, {
configurable: true,
get: function () {
Object.defineProperty(this, prop, {
value: undefined,
writable: true
});
var value = initializer.call(this, obj, prop);
Object.defineProperty(this, prop, {
value: value,
writable: !!writable
});
return value;
},
set: function (value) {
Object.defineProperty(this, prop, {
value: value,
writable: !!writable
});
return value;
}
});
};
});