Показать сообщение отдельно
  #18 (permalink)  
Старый 15.03.2009, 17:20
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от kefi
Т.е. прототипом вновь создаваемых объектов подобных constr , будет function prototype() { [native code] } ,
а прототипом функции function(){ this.a = 1;} будет [object Object] .
constr - у Вас конструктор. Естественно, он тоже объект, и у него есть свой прототип - __proto__:

alert(constr.__proto__); // оригинальный Function.prototype, который равен  function () {}

alert(constr.constructor.prototype); // то же самое, т.к. конструктор у constr - Function

alert(constr.constructor.prototype === constr.__proto__);


Однако, т.к. constr сам конструктор, то все порождённые от него объекты также будут иметь свой __proto__:
var a = new constr();

alert(a.__proto__); // объект, на который так же указывает constr.prototype (пока эта ссылка есть)

alert(a.__proto__ === constr.prototype); // действительно, они указывают на один объект


Поэтому родной прототип конструктора constr - это constr.__proto__, а прототип порождаемых от constr объектов - constr.prototype (порождённые объекты от constr будут смотреть на constr.prototype через .__proto__. Причём, ссылка constr.prototype может исчезнуть позже, а порождённыйОбъект.__proto__ - нет).
__________________
Тонкости ECMAScript
Ответить с цитированием