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

            var property = fields.shift();

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

            var field, container;

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

            var wasExisted = field in container;
            var oldValue   = container[field];
            var newValue   = this.__applySetters(property, value, fields);

            container[field] = newValue;

            if (options.emit && this.__checkEmitEvent()) {
                this.__emitPropertySet([property].concat(fields), newValue, oldValue, wasExisted);
            }

            return this;
        }
function(fields, value, options) {
            fields  = this.__resolveFields(fields);
            options = this.__resolveOptions(options);

            var property = fields.shift();

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

            var field, container;

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

            var wasExisted = field in container;
            var oldValue   = container[field];
            var newValue   = this.__applySetters(property, value, fields);

            container[field] = newValue;

            if (options.emit && this.__checkEmitEvent()) {
                this.__emitPropertySet([property].concat(fields), newValue, oldValue, wasExisted);
            }

            return this;
        }
function ( fields , value , options ) { fields = this . __resolveFields ( fields ) ; options = this . __resolveOptions ( options ) ; var property = fields . shift ( ) ; if ( options . check ) { this . __checkProperty ( property , { writable : true , method : 'set' , params : _ . toArray ( arguments ) } ) ; } var field , container ; if ( fields . length ) { field = _ . last ( fields ) ; container = this . __getPropertyValue ( [ property ] . concat ( fields ) . slice ( 0 , - 1 ) , false ) ; } else { field = '_' + property ; container = this ; } var wasExisted = field in container ; var oldValue = container [ field ] ; var newValue = this . __applySetters ( property , value , fields ) ; container [ field ] = newValue ; if ( options . emit && this . __checkEmitEvent ( ) ) { this . __emitPropertySet ( [ property ] . concat ( fields ) , newValue , oldValue , wasExisted ) ; } return this ; }
Sets property value

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

@this {clazz|object}
Sets property value