В JavaScript: "Хорошие детали" Крокфорд утверждает, что одним из недостатков использования псевдоклассического наследования является то, что он публично раскрывает переменные экземпляра.
Например:
var Ball = function(width, color) {
this.width = width;
this.color = color;
}
var redBall = new Ball(5, "red");
redBall.width = 12; // Changes width to 12
Теперь, если я хочу, чтобы ширина шара была закрытой?
Вот что я пробовал:
var Ball = function(width, color) {
this.getWidth = function() { return width; }
this.color = color;
}
var redBall = new Ball(5, "red");
Проблема с этим заключается в том, что мы все равно можем изменить this.getWidth
, и там могут быть прототипы, которые полагаются на него.
Как насчет...
var Ball = function(width, color) {
return {
getWidth: function() { return width; },
color: color
}
}
var redBall = new Ball(5, "red");
Проблема заключается в том, что методы прототипа больше не имеют доступа к переменным экземпляра. Он также ближе к функциональной схеме наследования, но с большей косвенностью, используя оператор new
.
Итак, как мне добиться конфиденциальности, используя псевдоклассический шаблон наследования? Возможно ли это?