src/components/meta/Properties.js
function self_method(data, methods) {
            if (!data) {
                return data;
            }

            var i, ii, prop;

            if (data.constructor === ({}).constructor) {
                for (prop in data) {
                    if (_.isUndefined(data[prop])) {
                        delete data[prop];
                        continue;
                    }

                    data[prop] = self_method(data[prop], methods);
                }
            }
            else if (_.isArray(data)) {
                for (i = 0, ii = data.length; i < ii; ++i) {
                    if (_.isUndefined(data[i])) {
                        --i; --ii;
                        continue;
                    }

                    data[i] = self_method(data[i], methods);
                }
            }
            else {

                methods = _.extend({}, methods, { __getData: null });

                _.each(methods, function(params, method) {

                    if (!_.isFunction(data[method])) {
                        return;
                    }

                    if (_.isNull(params) || _.isUndefined(params)) {
                        params = [];
                    }
                    if (!_.isArray(params)) {
                        params = [params];
                    }

                    data = data[method].apply(data, params);
                });
            }

            return data;
        }
function self_method(data, methods) {
            if (!data) {
                return data;
            }

            var i, ii, prop;

            if (data.constructor === ({}).constructor) {
                for (prop in data) {
                    if (_.isUndefined(data[prop])) {
                        delete data[prop];
                        continue;
                    }

                    data[prop] = self_method(data[prop], methods);
                }
            }
            else if (_.isArray(data)) {
                for (i = 0, ii = data.length; i < ii; ++i) {
                    if (_.isUndefined(data[i])) {
                        --i; --ii;
                        continue;
                    }

                    data[i] = self_method(data[i], methods);
                }
            }
            else {

                methods = _.extend({}, methods, { __getData: null });

                _.each(methods, function(params, method) {

                    if (!_.isFunction(data[method])) {
                        return;
                    }

                    if (_.isNull(params) || _.isUndefined(params)) {
                        params = [];
                    }
                    if (!_.isArray(params)) {
                        params = [params];
                    }

                    data = data[method].apply(data, params);
                });
            }

            return data;
        }
function self_method ( data , methods ) { if ( ! data ) { return data ; } var i , ii , prop ; if ( data . constructor === ( { } ) . constructor ) { for ( prop in data ) { if ( _ . isUndefined ( data [ prop ] ) ) { delete data [ prop ] ; continue ; } data [ prop ] = self_method ( data [ prop ] , methods ) ; } } else if ( _ . isArray ( data ) ) { for ( i = 0 , ii = data . length ; i < ii ; ++ i ) { if ( _ . isUndefined ( data [ i ] ) ) { -- i ; -- ii ; continue ; } data [ i ] = self_method ( data [ i ] , methods ) ; } } else { methods = _ . extend ( { } , methods , { __getData : null } ) ; _ . each ( methods , function ( params , method ) { if ( ! _ . isFunction ( data [ method ] ) ) { return ; } if ( _ . isNull ( params ) || _ . isUndefined ( params ) ) { params = [ ] ; } if ( ! _ . isArray ( params ) ) { params = [ params ] ; } data = data [ method ] . apply ( data , params ) ; } ) ; } return data ; }
Process object data

@param {object} data    Object data
@param {object} methods Getter methods
@returns {object} Processed data

@this {clazz|object}
Process object data