Understanding the various relations between Object, Function, function, .prototype, and [[prototype]] in JavaScript