src/xblocks/view.js
function mergeCustomizer(objValue, srcValue, key) {
    if (isArray(objValue)) {
        return objValue.concat(srcValue);
    }

    if (METHODS_INHERITANCE.indexOf(key) !== -1) {
        return wrap(objValue, wrap(srcValue, wrapperFunction));
    }

    if (METHODS_MERGE_RESULT.indexOf(key) !== -1) {
        return wrap(objValue, wrap(srcValue, wrapperMergeResult));
    }

    if (key === 'shouldComponentUpdate') {
        return wrap(objValue, wrap(srcValue, wrapperOrResult));
    }

    if (key === 'statics') {
        checkOverriddenMethods(objValue, srcValue);
    }

    if (key === 'render' && objValue && srcValue) {
        throw new Error('The "render" method you can override');
    }

    if (key === 'displayName' && objValue && srcValue) {
        throw new Error('The "displayName" property can not be redefined');
    }

    if (isFunction(objValue) && isFunction(srcValue)) {
        throw new Error(`The following methods are overridden: "${key}"`);
    }
}
function mergeCustomizer(objValue, srcValue, key) {
    if (isArray(objValue)) {
        return objValue.concat(srcValue);
    }

    if (METHODS_INHERITANCE.indexOf(key) !== -1) {
        return wrap(objValue, wrap(srcValue, wrapperFunction));
    }

    if (METHODS_MERGE_RESULT.indexOf(key) !== -1) {
        return wrap(objValue, wrap(srcValue, wrapperMergeResult));
    }

    if (key === 'shouldComponentUpdate') {
        return wrap(objValue, wrap(srcValue, wrapperOrResult));
    }

    if (key === 'statics') {
        checkOverriddenMethods(objValue, srcValue);
    }

    if (key === 'render' && objValue && srcValue) {
        throw new Error('The "render" method you can override');
    }

    if (key === 'displayName' && objValue && srcValue) {
        throw new Error('The "displayName" property can not be redefined');
    }

    if (isFunction(objValue) && isFunction(srcValue)) {
        throw new Error(`The following methods are overridden: "${key}"`);
    }
}
Special handler of merge.
Arrays are merged by the concatenation.
@example
_.mergeWith(obj, src, mergeCustomizer);
@param {*} objValue
@param {*} srcValue
@param {string} key
@returns {Object|array|undefined}
@throws The following methods are overridden
@throws The "render" method you can override
@throws The "displayName" property can not be redefined
@private