Показать сообщение отдельно
  #22 (permalink)  
Старый 03.01.2016, 19:37
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Keramet Посмотреть сообщение
callbackhell,
Я вот тоже так думал, но:
1.
function Person() {}
var p1 = new Person();
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;

var p2 = new Person();


2.
function Person() {}
var p1 = new Person();
Person.prototype = {
	name : "Nicholas",
	age : 29
};

var p2 = new Person();


дают разные результаты. В чём подвох - не пойму
в первом случае p1.__proto__ и p2.__proto__ ссылаются на один и тот же объект - Person.prototype. Он не менялся, в него просто добавили два поля.
Во втором - p1.__proto__ ссылается на предыдущий Person.prototype, который был заменен новым объектом уже после создания p1. И потому p1 более не считается экземпляром Person, с точки зрения прототипного ООП.

Второй случай вполне допустим, только заменять Person.prototype надо сразу же при создании функции Person, до создания экземпляров. И не забыть туда свойство constructor поместить, о чем ранее говорилось. Тогда всё будет нормалёк.

Ну а ежели какое наследование замутить изволите, то там особо без вариантов:
Person.prototype = Object.create(ParentClass.prototype);
и далее добавление методов по первой схеме.
Ответить с цитированием