src/components/meta/Properties.js
function(fields, options) {
            fields  = this.__resolveFields(fields);
            options = this.__resolveOptions(options);

            var property = fields.shift();

            if (options.check) {
                this.__checkProperty(property, {
                    writable: true,
                    method:   'remove',
                    params:  _.toArray(arguments)
                });
            }

            var field, container;

            if (fields.length) {
                field     = _.last(fields);
                container = this.__getPropertyValue([property].concat(fields).slice(0, -1));

                if (!(field in container)) {
                    return this;
                }
            }
            else {
                field     = '_' + property;
                container = this;
            }

            var oldValue =  container[field];

            if (fields.length) {
                delete container[field]
            }
            else {
                container[field] = undefined;
            }

            if (options.emit && this.__checkEmitEvent()) {
                this.__emitPropertyRemove([property].concat(fields), oldValue);
            }
            return this;
        }
function(fields, options) {
            fields  = this.__resolveFields(fields);
            options = this.__resolveOptions(options);

            var property = fields.shift();

            if (options.check) {
                this.__checkProperty(property, {
                    writable: true,
                    method:   'remove',
                    params:  _.toArray(arguments)
                });
            }

            var field, container;

            if (fields.length) {
                field     = _.last(fields);
                container = this.__getPropertyValue([property].concat(fields).slice(0, -1));

                if (!(field in container)) {
                    return this;
                }
            }
            else {
                field     = '_' + property;
                container = this;
            }

            var oldValue =  container[field];

            if (fields.length) {
                delete container[field]
            }
            else {
                container[field] = undefined;
            }

            if (options.emit && this.__checkEmitEvent()) {
                this.__emitPropertyRemove([property].concat(fields), oldValue);
            }
            return this;
        }
function ( fields , options ) { fields = this . __resolveFields ( fields ) ; options = this . __resolveOptions ( options ) ; var property = fields . shift ( ) ; if ( options . check ) { this . __checkProperty ( property , { writable : true , method : 'remove' , params : _ . toArray ( arguments ) } ) ; } var field , container ; if ( fields . length ) { field = _ . last ( fields ) ; container = this . __getPropertyValue ( [ property ] . concat ( fields ) . slice ( 0 , - 1 ) ) ; if ( ! ( field in container ) ) { return this ; } } else { field = '_' + property ; container = this ; } var oldValue = container [ field ] ; if ( fields . length ) { delete container [ field ] } else { container [ field ] = undefined ; } if ( options . emit && this . __checkEmitEvent ( ) ) { this . __emitPropertyRemove ( [ property ] . concat ( fields ) , oldValue ) ; } return this ; }
Removes property value.
Really remove property in contrast to `clear` method

@param {string|array} fields   Property fields
@param {object}       options  Options (emit, check)
@returns {clazz|object} this

@this {clazz|object}
Removes property value . Really remove property in contrast to clear method