Второй прототип анонимной и именованной функции

Кто -нибудь может объяснить, почему b.prototype.prototype не определено (не "Object {}")?

a = function(){}
function b(){}

console.log(a.prototype)                        //Object {} 
console.log(b.prototype)                        //b {}
console.log(a.prototype.prototype)              //undefined 
console.log(b.prototype.prototype)              //undefined

a> Object {}> undefined - хорошо

b > b{} >???

3 ответа

В основном, вы, кажется, смущены тем фактом, что прототип b кажется b снова - что это не так. Оба прототипа являются объектами и поэтому не имеют прототипа сами по себе. Реализация метода toString() (или какой-либо конкретной консоли, которую вы используете для отображения этого объекта) построенного прототипа зависит только от реализации, и в этом случае она включает имя функции (если она есть) на выходе. Вы можете получить другой вывод в другом браузере, например, IE.

Он не определен, потому что вы ничего не присвоили свойству prototype и ты не создал его.

a.prototype.prototype=a.prototype;
console.log(a.prototype.prototype)//{}

Почему бы b.prototype.prototype определиться?

var a = function () {};

a.prototype; // {}

function b () {}

b.prototype; // {}

Ни один из прототипов не имеет свойства, называемого прототипом...
Таким образом, запрос неэкстантного свойства объекта приводит к undefined,

Тот факт, что консоль вызывает b.prototype"b{}" ничего не меняет Я просто говорю, что это прототип объекта named-funciton b, а не анонимная функция, такая как назначенная a,

Это все еще пустой объект без прототипа.

Другие вопросы по тегам