bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Конструктор прототипа?

Здравствуйте.
1) А есть ли смысл указывать для дочернего объекта конструктор прототипа, я так понимаю это только ссылка на функцию, и если его необязательно использовать?
proto = { color: green }
const Son = function( name ) { }
Son.prototype = Object.create( proto )
Son.prototype.constructor = Son //


2) Как лучше всего добавлять в прототип свои свойства
Son.prototype = Object.create( proto, { constructor: { value: Son }, foo: { writable: false, configurable: false, value: 'привет' } } )


или
Son.prototype = Object.create( proto );
Son.prototype.constructor =  Son;
Son.prototype.foo = 'привет';


3) Как лучше добавлять свои методы, вариант только так, или есть более элегантное решение, например создать объект со своими методами и склеить его с прототипом?
Son.prototype.test= function() { return this };
Son.prototype.test1= function() { return this };
Son.prototype.test2= function() { return this };
Son.prototype.test3= function() { return this };
Son.prototype.test4= function() { return this };
Son.prototype.test5= function() { return this };


Спасибо.
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM
А есть ли смысл указывать для дочернего объекта конструктор прототипа, я так понимаю это только ссылка на функцию, и если его необязательно использовать?
У каждого конструктора есть прототип. По умолчанию это Object.prototype.
Если Вам нужен прототип, указывайте. Если не нужен, но и не за чем. Очевидно же.
Только одна поправка: прототип это объект, который (как и прочие объекты) состоит из полей, среди которых есть функции.

Как лучше всего добавлять в прототип свои свойства
Я не знаю. ИМХО, для прикладных задач лучше делать так, чтоб читало проще.

Как лучше добавлять свои методы, вариант только так, или есть более элегантное решение, например создать объект со своими методами и склеить его с прототипом?
Без разницы, но нужно учитывать один момент.
Пусть мы определили конструктор Son и ему задали Son.prototype тем или иным образом. Для простоты положим, что прототип состоит только из функций. Затем создали несколько экземпляров (new Son).
Далее, предположим, мы хотим добавить в прототип новый метод или изменить существующий.
Здесь необходимо решить, будем ли (1) мы менять прототип уже созданных экземпляров или же (2) у созданных экземпляров оставим их старый прототип, а у создаваемых будет уже новый.

P.S. наконец, в последних редакциях появились новые синтаксические конструкции. О них тоже забывать не нужно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы