2013-03-16 5 views
1

, пожалуйста, может кто-нибудь объяснить, почему 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 

а> Объект {}> не определено - ОК

Ь> Ь {}> ???

ответ

0

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

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

Зачем определять b.prototype.prototype?

var a = function() {}; 

a.prototype; // {} 

function b() {} 

b.prototype; // {} 

Ни прототип имеет свойство прототипа ...
как таковой, прося nonextant имущественного комплекса объекта приводит в undefined.

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

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

+0

вы можете определить по своему желанию. a.prototype.prototype = function() { console.log ('hi') return a.prototype; } a(). Прототип() // hi – spaceman12

+0

@ spaceman12 конечно вы можете. Дело в том, что он регистрирует значение. И консоль предполагает, что вместо 'Object {}' это 'b {}', ergo, какой должен быть прототип 'b.prototype', если вы немедленно зарегистрируете' b.prototype.prototype; ', не присваивая ничего. Или, что должно быть 'instance_of_b .__ proto __.__ proto __;' point to ... ... или, на самом деле, с учетом кода: 'instance_of_b .__ proto __. Prototype;' И ответ на все это звучит ' undefined'. – Norguard

1

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

Смежные вопросы