N
N
Nikolai Antonov2015-06-25 01:01:24
JavaScript
Nikolai Antonov, 2015-06-25 01:01:24

Why write the name of the constructor in the "decorator" pattern?

constructor: Ball, - why write the name of the function? How can it be useful?

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"
});

Answer the question

In order to leave comments, you need to log in

3 answer(s)
S
Sergey Melnikov, 2015-06-25
@my-nickname

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() {}

A
Andrew, 2015-06-25
@Ashlst

When creating its prototype, the constructor property will not point to Ball, so that this connection is not lost, a new property of the same name is created in the prototype.

S
Sergey, 2015-06-25
Protko @Fesor

this is not a name, you explicitly set the constructor but the prototype, which is interesting. Why - but here I will not say. Now it is fashionable to use Object.create in general.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question