With that setup, the only way to do it is to explicitly pass the object (the "Thing" instance) as a parameter, or use .call() or .apply().
If you instantiate a "Thing":
var thing = new Thing();
then you can get to that "bar" function as thing.foo.bar. Invoked from that reference:
thing.foo.bar();
the value of this inside "bar" will be the "foo" object on the prototype. You could however use .call():
thing.foo.bar.call(thing);
then this in the invocation of "bar" will indeed be the instantiated "Thing" object.
It's important to keep in mind that, in JavaScript, setting an object property to a function does not create any kind of special relationship between the object and the function. What matters is the relationship(s) discovered when referring to property values in expressions. It's always dynamic, and while the mechanics of following the prototype chain are somewhat dizzying, the rules for how this is determined are pretty simple.