Ok guys, so I have this code:
var q=(function(){
    var u,q,x;
    x=616;
    q=q_construct();
    qp_construct();
    return q;
    function q_construct(){
        var q,pro;
        q={
            a:1
        };
        return q;
    };
    function qp_construct(){
        console.log('1 ⇒    ',q,x);
        Object.defineProperty(Object.prototype,'q',{get:function(){
            console.log('2 ⇒    ',q,x);
            var r={b:2};
            return r;
        }});
    };
})();
When I enter y={z:616}; y.q; into the console, I get:
1 ⇒  Object {a: 1} 616
y={z:616}; y.q;                 //  console entry point
2 ⇒  Object {a: 1} 616
Object {b: 2}
Yet if i change:
var r={b:2};
return r;
to
var q={b:2};
return q;
the result changes from:
2 ⇒  Object {a: 1} 616
to
2 ⇒  undefined 616
I can not find out why, when setting this variable name to q, the q from the inherent scope is redefined as undefined.  Something is niggling in the back of my head, saying I read something on "hoisting" that might help?
