Что такое prototype в javascript?
Что такое prototype в javascript?
По простому, это возможность использовать объект (ф-ию/переменную) "родителя" (прототипа) если нет своего объекта.
Например вы пытаетесь вызвать ф-ию form1.echoX(), т.к. её нет будет попытка вызвать form1.__proto__.echoX(), если этой нет то form1.__proto__.__proto__.echoX() и т.д.
Как "заполнять" прототип, можете найти в "любом" учебнике по JS, так же @rock привел пример.
jsfiddle.net/ck89g/1
Прототип (Конструктор.prototype) - объект, который клонируется по ссылке при создании инстанса конструктора через new. Создается объект со скрытым свойством [[prototype]], в некоторых движках свойство доступно как Инстанс.__proto__. При получении свойств инстанса, если они отсутствуют в новом объекте, движок ищет их в прототипе. Новые же свойства пишутся в инстанс, не изменяя прототип.
В примере у вас еще и проблемы с пониманием контекста вызова (this) функции. В конструкторе (при вызове через new) это будет новый, созданный из прототипа, объект. В методе это объект, от которого его вызывают (до последней точки). При вызове как функции (без точек) это глобальный объект (window). Контекст можно привязать методом функции .bind или запустить функцию в произвольном контексте - .call, .apply.
Вы добавляете метод и свойство в прототип при каждом вызове конструктора и запускаете метод в контексте прототипа, а не инстанса.