Этот образец достигает частных переменных прямоугольника. Переменные myLength и myWidth отличаются для разных экземпляров. Так почему же это не рекомендуется?Javascript: получение личных переменных через анонимный объект возврата
var rectangle = function() {
var myLength = 8;
var myWidth = 6;
var getMyLength = function() {
return myLength;
};
var setMyLength = function (value) {
myLength = value;
};
var getMyWidth = function() {
return myWidth;
};
var setMyWidth = function (value) {
myWidth = value;
};
var drawFigure = function() {
console.log("Draw invoked for figure: " +
getMyLength() + " * " + getMyWidth());
};
return {
getMyLength: getMyLength,
setMyLength: setMyLength,
getMyWidth: getMyWidth,
setMyWidth: setMyWidth,
drawFigure: drawFigure
}
};
Затем мы используем его следующим образом:
var myRectangle = new rectangle();
myRectangle.drawFigure(); // Draw invoked for figure: 8 * 6
myRectangle.setMyLength(3);
myRectangle.setMyWidth(5);
myRectangle.drawFigure(); // Draw invoked for figure: 3 * 5
var myRectangle1 = new rectangle();
myRectangle1.drawFigure(); // Draw invoked for figure: 8 * 6
* «Так почему же это не рекомендуется?» * Кто сказал, что это не рекомендуется? Это очень распространенный подход, когда вам необходимо защитить переменные. –
... и 'new rectangle();' может быть просто 'rectangle();'. Нет смысла выделять новый объект, если вы проигнорируете его и вернете другое. –
@cookiemonster Спасибо. Я вижу много примеров, используя this.length и this.width вместо var. Почему вы используете this.methods? Одна примерная страница, которую я использую, чтобы узнать: http://phrogz.net/JS/classes/OOPinJS.html – bschandramohan