dist/regular/strict/dejavu.js
function inspectInstance(target, cache) {
        // If browser has no define property it means it is too old and
        // in that case we return the target itself.
        // This could be improved but I think it does not worth the trouble
        if (!hasDefineProperty) {
            return target;
        }

        var def,
            simpleConstructor,
            methodsCache,
            propertiesCache,
            obj,
            tmp,
            key;

        obj = fetchCache(target, cache.instances);
        if (obj) {
            return obj;
        }

        def = target.$static[$class];
        simpleConstructor = def.simpleConstructor;
        methodsCache = target[cacheKeyword].methods;
        propertiesCache = target[cacheKeyword].properties;

        obj = createObject(simpleConstructor.prototype);
        cache.instances.push({ target: target, inspect: obj });

        // Methods
        for (key in target[redefinedCacheKeyword].methods) {
            obj[key] = inspect(methodsCache[key], cache, true);
        }

        // Properties
        for (key in target[redefinedCacheKeyword].properties) {
            tmp = hasOwn(propertiesCache, key) ? propertiesCache[key] : target[key];
            obj[key] = inspect(tmp, cache, true);
        }

        // Handle undeclared properties
        methodsCache = def.methods;
        propertiesCache = def.properties;
        for (key in target) {
            if (hasOwn(target, key) && !hasOwn(obj, key) && !propertiesCache[key] && !methodsCache[key]) {
                obj[key] = inspect(target[key], cache, true);
            }
        }

        // Fix the .constructor
        tmp = obj.constructor.$constructor;
        while (tmp) {
            inspectConstructor(tmp, cache, true);
            tmp = tmp.$parent;
        }

        return obj;
    }
function inspectInstance(target, cache) {
        // If browser has no define property it means it is too old and
        // in that case we return the target itself.
        // This could be improved but I think it does not worth the trouble
        if (!hasDefineProperty) {
            return target;
        }

        var def,
            simpleConstructor,
            methodsCache,
            propertiesCache,
            obj,
            tmp,
            key;

        obj = fetchCache(target, cache.instances);
        if (obj) {
            return obj;
        }

        def = target.$static[$class];
        simpleConstructor = def.simpleConstructor;
        methodsCache = target[cacheKeyword].methods;
        propertiesCache = target[cacheKeyword].properties;

        obj = createObject(simpleConstructor.prototype);
        cache.instances.push({ target: target, inspect: obj });

        // Methods
        for (key in target[redefinedCacheKeyword].methods) {
            obj[key] = inspect(methodsCache[key], cache, true);
        }

        // Properties
        for (key in target[redefinedCacheKeyword].properties) {
            tmp = hasOwn(propertiesCache, key) ? propertiesCache[key] : target[key];
            obj[key] = inspect(tmp, cache, true);
        }

        // Handle undeclared properties
        methodsCache = def.methods;
        propertiesCache = def.properties;
        for (key in target) {
            if (hasOwn(target, key) && !hasOwn(obj, key) && !propertiesCache[key] && !methodsCache[key]) {
                obj[key] = inspect(target[key], cache, true);
            }
        }

        // Fix the .constructor
        tmp = obj.constructor.$constructor;
        while (tmp) {
            inspectConstructor(tmp, cache, true);
            tmp = tmp.$parent;
        }

        return obj;
    }
function inspectInstance ( target , cache ) { // If browser has no define property it means it is too old and // in that case we return the target itself. // This could be improved but I think it does not worth the trouble if ( ! hasDefineProperty ) { return target ; } var def , simpleConstructor , methodsCache , propertiesCache , obj , tmp , key ; obj = fetchCache ( target , cache . instances ) ; if ( obj ) { return obj ; } def = target . $static [ $class ] ; simpleConstructor = def . simpleConstructor ; methodsCache = target [ cacheKeyword ] . methods ; propertiesCache = target [ cacheKeyword ] . properties ; obj = createObject ( simpleConstructor . prototype ) ; cache . instances . push ( { target : target , inspect : obj } ) ; // Methods for ( key in target [ redefinedCacheKeyword ] . methods ) { obj [ key ] = inspect ( methodsCache [ key ] , cache , true ) ; } // Properties for ( key in target [ redefinedCacheKeyword ] . properties ) { tmp = hasOwn ( propertiesCache , key ) ? propertiesCache [ key ] : target [ key ] ; obj [ key ] = inspect ( tmp , cache , true ) ; } // Handle undeclared properties methodsCache = def . methods ; propertiesCache = def . properties ; for ( key in target ) { if ( hasOwn ( target , key ) && ! hasOwn ( obj , key ) && ! propertiesCache [ key ] && ! methodsCache [ key ] ) { obj [ key ] = inspect ( target [ key ] , cache , true ) ; } } // Fix the .constructor tmp = obj . constructor . $constructor ; while ( tmp ) { inspectConstructor ( tmp , cache , true ) ; tmp = tmp . $parent ; } return obj ; }
Inspects an instance.

@param {Object} target The instance
@param {Array}  cache  The cache

@return {Object} The inspected instance
Inspects an instance .