Второй прототип анонимной и именованной функции
Кто -нибудь может объяснить, почему 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
,
Это все еще пустой объект без прототипа.