JavaScript は、prototype 型

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain

var car = new Car( ); // コンストラクタ

// インスタンスと、prototype の両方に、メソッドを追加する。
car.f = function( ) { }
car.__proto__.f = function( ) { return 1; }

console.log( car, car.__proto__ ); // Car { f: [λ] } Car { f: [λ] }

var car2 = new Car( ); // コンストラクタ
console.log( car2, car2.__proto__ ); // Car {} Car { f: [λ] }

console.log( car2.f( ) ); // 1

car.f, car.__proto__.f は、1階層異なる。
car.f は、そのインスタンスだけに、メソッドを追加した(Ruby の特異メソッド)

一方、car.__proto__.f は、1階層親の__proto__、つまり、Car コンストラクタにメソッドを追加したので、
別のインスタンスにも追加されている!

だから、car2.f( ) を呼んだ際、car2 には、fメソッドが無いのに、
prototype chain を遡って、Carコンストラクタに追加された、fメソッドを呼べる!

ただし、__proto__ は非推奨となった!