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