It actually is a hierarchy of Objects… classes and prototypes work differently, that said, the non-class syntax examples are actually not properly demonstrating how prototype inheritance works, or should be done.
function Bar() {}
Bar.prototype.fn = function() {};
function Foo() {
Bar.call(this); // call parent constructor
}
Foo.prototype = Object.create(Bar.prototype); // or: new Bar() before ES5
The examples in the article don’t follow this flow, the parent constructor call is entirely optional. Beyond that, any other chaining without the prototype being set can lead to side effects (such as not calling the parent constructor) and should not be done in the constructor function on any instance methods preferring the prototype property binding over the this.prop binding in the constructor. The only exception would be to hide internalized variables, which is another long rabbit hole.