Вы должны использовать свойство prototype
только в Функции конструктора , а не в экземплярах объекта , например:
function Test () {}
Test.prototype.method1 = function () {/*...*/};
var obj = new Test();
Свойство prototype
функций конструктора используется оператором new
, когда он создает наш новый экземпляр объекта.
Все нативные объекты имеют скрытую ссылку, которая создает цепочку прототипов.
Эта скрытая связь между объектами является внутренним свойством [[Prototype]]
, и только оператор new
может установить его.
В приведенном выше примере obj
внутренне связан с его прототипом конструктора, method1
доступен из obj
, но физически для этого объекта не существует, этот метод существует для Test.prototype
объект, и он извлекается через цепочку прототипов , например:
typeof obj.method1; // "function"
obj.hasOwnProperty('method1'); // false
obj.method1 === Test.prototype.method1; // true
На экземплярах объекта присвоение свойства prototype
не имеет смысла, оно будет принято так же, как и любое другое имя свойства:
var myObject = {};
myObject.prototype = "foo";
myObject.bar = "bar";
// myObject is simply {"prototype":"foo","bar":"bar"}