You can't for sure. You do not have the right to know in which objects your function exists.
Note that this may be several: you could write this after your existing code:
var obj2 = {some:obj.subobj3};
Thus, there can be no unique link (and no link is available) from the property value to the object containing it.
Now, if you are happy with the link created when you created the object, you can use the factory to create your object:
obj = (function(){ var parent = { subobj1: { }, subobj2: { func1: function(){ }, func2: function(){ } }, subobj3: { func3: function(){ }, func4: function(){ parent.subobj2.func1(); } } }; return parent; })();
Then you can call
obj.subobj3.func4();
Demonstration
EDIT
I see that you gave the OOP tag to your question. You should know that the template I gave is more often used to define modules. OOP in javascript is most often done using new and prototype to enable instance sharing methods and inheritance. As you probably need modules, not OOP, you seem to be fine.
See this introduction .
source share