src/sap.ui.core/src/sap/ui/model/meta/BaseAdapter.js
function(sProperty, vGetter, aArgs, caller) {
			if (!vGetter) {
				return;
			}

			if (!caller) {
				caller = this;
			}

			Object.defineProperty(this, sProperty, {
				configurable: true,
				get: function() {
					if (this._mCustomPropertyBag[sProperty]) {
						return this._mCustomPropertyBag[sProperty];
					}

					if (!this._mPropertyBag.hasOwnProperty(sProperty)) {
						this._mPropertyBag[sProperty] = new SyncPromise(function(resolve, reject) {
						if (typeof vGetter == 'function') {
								resolve(vGetter.apply(caller, aArgs));
						} else {
								resolve(vGetter);
						}
						});

					}

					return this._mPropertyBag[sProperty];
				},
				set: function(vValue) {
					this._mCustomPropertyBag[sProperty] = vValue;
				}
			});
		}
function(sProperty, vGetter, aArgs, caller) {
			if (!vGetter) {
				return;
			}

			if (!caller) {
				caller = this;
			}

			Object.defineProperty(this, sProperty, {
				configurable: true,
				get: function() {
					if (this._mCustomPropertyBag[sProperty]) {
						return this._mCustomPropertyBag[sProperty];
					}

					if (!this._mPropertyBag.hasOwnProperty(sProperty)) {
						this._mPropertyBag[sProperty] = new SyncPromise(function(resolve, reject) {
						if (typeof vGetter == 'function') {
								resolve(vGetter.apply(caller, aArgs));
						} else {
								resolve(vGetter);
						}
						});

					}

					return this._mPropertyBag[sProperty];
				},
				set: function(vValue) {
					this._mCustomPropertyBag[sProperty] = vValue;
				}
			});
		}
function ( sProperty , vGetter , aArgs , caller ) { if ( ! vGetter ) { return ; } if ( ! caller ) { caller = this ; } Object . defineProperty ( this , sProperty , { configurable : true , get : function ( ) { if ( this . _mCustomPropertyBag [ sProperty ] ) { return this . _mCustomPropertyBag [ sProperty ] ; } if ( ! this . _mPropertyBag . hasOwnProperty ( sProperty ) ) { this . _mPropertyBag [ sProperty ] = new SyncPromise ( function ( resolve , reject ) { if ( typeof vGetter == 'function' ) { resolve ( vGetter . apply ( caller , aArgs ) ) ; } else { resolve ( vGetter ) ; } } ) ; } return this . _mPropertyBag [ sProperty ] ; } , set : function ( vValue ) { this . _mCustomPropertyBag [ sProperty ] = vValue ; } } ) ; }
Puts a deferred property to the corresponding adapter

@param {string} sProperty the name of an adapters property
@param {object} vGetter a getter which can be either an object or a function
@param {array} aArgs an optional array of arguments used if vGetter is a function
@param {object} the caller that inhabits the vGetter function if not supplied the caller is the current closure
Puts a deferred property to the corresponding adapter