I don't think they are doing that because .prototype is irrelevant
If it would be irrelevant then it would not exist at all - so, obviously it is used for something. It's only use is for "new" (as described earlier and in that article) - it has no other uses (well, exceptions excepted: instanceof vs isprototype). On its own - it does nothing (
inc. not used for traversing prototype chain when reading object properties => ie. not the real prototype chain).
While __proto__ appears in widespread use, I think I've read somewhere it was never meant to be exposed for real. Its doc page states indeed its use is deprecated.
It indeed was not meant to be exposed - however, except IE they all do using "__proto__". Also, in future versions (ES6) it will be exposed as "__proto__" (not sure if the specification is finalized yet).
It is a more convenient alternative for the already standardized (hence the deprecation note) Object.setPrototypeOf/getPrototypeOf.
Its exposedness is not relevant to its existence tho (it is a fundamental part of the language). Referring to the property holding the real prototype chain using "__proto__" is just convenient (as virtually everything except IE exposes it with that name already).
"__proto__" = prototype chain
"prototype" = used to build the prototype chain for new objects created by "new"
... just got to love the confusion "new" managed to shoehorn into the language.
It is worth noticing however they build the inheritance chain as
DefaultInteresting.prototype = new Interesting;
And not as I am doing, neither new Interesting() nor Interesting. This really makes sense on its own.
Glad you are making progress on how to use "new" and its way of building the prototype chain. Just be sure you understand also what is going on under the hood.
Worth repeating in that regard perhaps:
1) Foo.prototype = SomeObject
2) Bar.prototype = new Foo
3) obj = new Bar
line 2: creates a new object and sets its "__proto__" to "SomeObject" and stores it in "Bar.prototype" (not in "Bar"'s prototype chain which is in "__proto__")
line 3: similarly creates a new object and sets its "__proto__" to the object stored in "Bar.prototype" (previously, line 2 stored an empty object with its "__proto__" set to "SomeObject" in there).
Ie. objects prototype, used by "new", is in "prototype" - with its real prototype chain pre built by line 2 and similar previous constructs.
Note that the property name "prototype" as an
objects "prototype" makes sense - just that it is not the
objects prototype CHAIN.
edit: well, just remembered that "instanceof" is related to "new" - can't think of anything else.