The __proto__ object is the actual object that is used in the lookup chain to resolve methods, etc. Whereas prototype is the object that is used to build __proto__ when you create an object with new.
new Employee().__proto__ === Employee.prototype;
new Employee().prototype === undefined;
There are few more differences,
| feature | Prototype | proto |
|---|
| Access | All the function constructors have prototype properties. | All the objects have __proto__ property |
| Purpose | Used to reduce memory wastage with a single copy of function | Used in lookup chain to resolve methods, constructors etc. |
| ECMAScript | Introduced in ES6 | Introduced in ES5 |
| Usage | Frequently used | Rarely used |