Edit in JSFiddle

var privates = (function(){
 
    var key = 1;
    function next_private_key() {
        key += 1;
        return key;
    }
    
    function privates(owner, obj) {
        if (typeof owner.__privates === 'undefined') {
            owner.__privates = {};
        }
        if (typeof obj.__private_key === 'undefined') {
            obj.__private_key = next_private_key();
        }
        if (typeof owner.__privates[obj.__private_key] === 'undefined') {
            owner.__privates[obj.__private_key] = {};
        }
               
        return owner.__privates[obj.__private_key];
    }
    
    return privates;
})();

var a = {}, b = {}, c = {};
privates(a, b).foo = 10;
privates(c, a).bar = 20;
console.log(privates(a, b).foo); // 10
console.log(privates(a, c).foo); // undefined
console.log(privates(c, b).foo); // undefined
console.log(privates(c, a).bar); // 20