1:35 With that in mind, let's take this one step further. The .prototype property object that lives on every function except arrow functions is what becomes the dunder proto value object when the new keyword is used against the function.
1:50 As we see here, we added a test property to the automatically created .prototype object that lives on the foo function object. Whenever the new keyword is used, a new object is created. The .prototype object that lives in the function the new keyword is called against becomes the next-in-line dunder proto object of the new object created from the new keyword.
2:13 This is why when we, on line nine, do a console.log name.test, we get "Hello, world." The browser console shows us this relationship a little clearer. If we open up the dunder proto property -- again, this is what's used prototypal inheritance -- we see it is the same object as the .prototype object that lives on the foo function.
2:35 While the .prototype property and functions is not used in the prototype chain lookup, like dunder proto properties are, you can see that they are related. You might be wondering why you should care about this. If we were to type the keyword Object -- with a capital O -- into our console, you might expect to see an actual object. However, it's actually a function.
2:56 These are built-in object functions. It's the same for array, map, and set. These are all global functions and not an object type, as it implies. These global functions have a .prototype object just like every other function. This .prototype object holds mini-methods you probably use in your code every day.