Где определяется свойство "прототип"


Ну, я все время предполагал, что свойство прототипа существует у всех объектов. Но после одного из собеседований я пришел домой и открыл консоль chrome

window.prototype
**undefined**

WTF?

Object.prototype
**Object {}**

ОК

var a = {};
a.prototype
**undefined**

var a = function(){}
a.prototype
**Object {}**

Я читал https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype несколько раз, но все еще не ясно. Кто-нибудь может объяснить?

Thanx

С. П. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype

Все объекты в JavaScript происходят от объекта; все объекты наследование методов и свойств от объекта.прототип, хотя они может быть переопределен (за исключением объекта с нулевым прототипом, т. е. Объект.create (null)

Окно является объектом, поэтому оно должно иметь свойство прототипа

1 5

1 ответ:

Объект, наследуемый экземпляром, его прототип, хранится во внутреннем свойстве, [[Prototype]]. Его значение можно получить с помощью Object.getPrototypeOf() (в ES5-совместимых двигателях).

console.log(Object.getPrototypeOf(window));
// Window { ... }

var a = {};
console.log(Object.getPrototypeOf(a));
// Object { ... }

Только functions явно имеют prototype свойство :

console.log(typeof Object);
// 'function'

И значение prototype просто используется для задания значения экземпляра [[Prototype]] при создании экземпляра new.

function Foo() {}
var bar = new Foo();

console.log(Foo.prototype === Object.getPrototypeOf(bar)); // true