Are private function declarations within a constructor reinstantiated everytime an instance is created?
Yes, a new function object is created every time. The underlying code may be shared between them if the engine is smart enough. V8 (in Chrome) is, and I'm sure most if not all the top-flight engines are here in 2016.
For that matter, given the example private function, what it does, and its scope, I'd hope a decent engine would optimize the function away entirely.
Is the private function an unnecessary performance hit?
That's your call. Creating functions is very, very fast on any modern JavaScript engine.
In that particular case, the private you've shown isn't using any information that's only available inside your constructor, so there's no particular reason to create it in the constructor. Moving it out makes sense. You can still keep it private if you like, without recreating it every time:
var Meal = (function() {
function private(cal) {
return cal * 2;
}
return function Meal(n) {
this.calories = private(n);
};
})();
Now, private is only created once, and that single function is used by all Meal instances. (Meal is also only created once.)
The object returned by the constructor function becomes the result of the whole new expression.
That's mostly unrelated to your main question. When you do new SomeFunction, the JavaScript engine creates an object backed by the object that SomeFunction.prototype refers to, and then calls SomeFunction with this referring to that object. If SomeFunction doesn't return anything, or returns a primitive like 42, or returns null, the result of the new expression is the reference to the object that new created. If SomeFunction returns a non-null object reference, that's the result of the new expression instead.