Когда вы делаете это:
MyConstructor.x = 3;
... вы только добавили свойство к экземпляру объекта Function, на которое ссылается MyConstructor
. У объекта Function есть много свойств, которые не становятся частью экземпляра (и вы не захотите их).
Таким образом, механизм создания свойств экземпляра с помощью конструктора заключается в использовании метода this.x
.
Когда конструктор работает, this
равен возвращаемому объекту. Так что это просто удобство, поэтому вам не нужно делать:
a = new MyConstructor();
a.x = 3;
a.x == 3 // TRUE!
Поскольку this
в конструкторе совпадает с результирующим объектом, нет необходимости делать это явно при каждом создании нового экземпляра.
Объект prototype
- это просто объект, на который ссылаются все экземпляры MyConstructor
, поэтому, если у экземпляра нет свойства, он затем идет к prototype
, чтобы найти его.
Чтобы проиллюстрировать связь между this
и новым экземпляром, рассмотрим следующий пример:
Пример: http://jsfiddle.net/M2prR/
var test; // will hold a reference to "this"
function MyConstructor() {
test = this; // make "test" reference "this"
}
// create a new instance
var inst = new MyConstructor;
// see if they are the same object. This will alert "true"
alert( inst === test );