Answer the question
In order to leave comments, you need to log in
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
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() {}
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.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question