Задать вопрос

Зачем писать в паттерне «декоратор» название конструктора?

constructor: Ball, - для чего писать название функции? Как может пригодится?
function Ball(param) {
  this._radius = param.radius;
  this._color = param.color;
}
Ball.prototype = {
  constructor: Ball,  // - зачем ?
  INCREMENTATION_STEP: 5,
  draw: function() {
    console.log("ball drawn with radius:" + this._radius + " and color: " + this._color)
  },
  inc: function() {
    this._radius += this.INCREMENTATION_STEP
  }
}

new Ball({
  radius: 100,
  color: "red"
});
  • Вопрос задан
  • 362 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
mlnkv
@mlnkv
JavaScript Developer
function Class() {}
console.log(typeof Class.prototype); 
//  "object"
// как видим, прототип объекта это тоже объект
console.log(typeof Class.prototype.constructor); 
// "function"
// и у него уже есть метод constructor
console.log(Class.prototype.constructor === Class);
// true
// и он как раз и ссылается на саму функцию Class
// но когда расширяют прототип таким образом
Class.prototype = {
  method: function() {},
  method2: function() {}
}
// то переопределяют свойство prototype и связь с конструктором теряется
// и поэтому явно определяют конструктор
Class.prototype = {
  constructor: Class,
  method: function() {},
  method2: function() {}
}
// для того, что бы этого не делать (не указывать явно ссылку на конструктор), 
// правильнее было бы сделать так

function MyAwesomeClass() {}
MyAwesomeClass.prototype.method = function() {}
MyAwesomeClass.prototype.method2 = function() {}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Ashlst
@Ashlst
Фанат эстетики и красивых решений.
При создании своего прототипа,свойство constructor будет указывать не на Ball,чтобы эта связь не потерялась создается новое,одноименное свойство в прототипе.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
это не название, вы явно задаете конструктор но у прототипа, что интересно. Зачем - а вот тут не скажу. Сейчас модно вообще пользоваться Object.create.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
24 дек. 2024, в 16:09
70000 руб./за проект
24 дек. 2024, в 15:54
300 руб./за проект
24 дек. 2024, в 15:42
2000 руб./за проект