function foo() {
var bar = function() { console.log("i'm a private method"); return 1; };
var iAmAPrivateVariable = 1;
return {
publicMethod: function() { alert(iAmAPrivateVariable); },
publicVariable: bar()
}
}
//usage
var thing = foo()
Это известно как функциональный подход, так как вы фактически используете замыкания для инкапсуляции (это единственный способ сделать это в javascript).
В общем случае вам не следуетделать ОО в javascript, это не так уж хорошо для этого языка по многим причинам.Придумайте схему с волнистыми скобками и точками с запятой, и вы начнете писать язык, как это делают профессионалы.Тем не менее, иногда ОО лучше подходит.В этих случаях вышеописанное, как правило, является лучшей ставкой
РЕДАКТИРОВАТЬ: внести наследование в микс
function parent() {
return { parentVariable: 2 };
}
function foo() {
var bar = function() { console.log("i'm a private method"); return 1; };
var iAmAPrivateVariable = 1;
me = parent();
me.publicMethod = function() { alert(iAmAPrivateVariable); };
me.publicVariable = bar();
return me;
}
Это делает вещи немного более завершенными, но достигает желаемого конечного результата, в то же времяфункциональный подход к концепциям ОО (в данном случае использование функций декоратора вместо реального наследования).Что мне нравится в этом подходе, так это то, что мы все еще действительно относимся к объектам так, как они должны быть на языке такого типа - к сумке свойств, к которой можно прикрепить материал по желанию.
EDIT2:
Просто хотел отдать должное, когда это необходимо, этот подход является очень небольшим упрощением того, что предлагает Даг Крокфорд в Javascript: The Good Parts.Если вы хотите поднять свои навыки js на следующий уровень, я настоятельно рекомендую начать там.Я не думаю, что когда-либо узнал так много из такой маленькой книги.
Еще одно замечание: это сильно отличается от того, что вы будете видеть большую часть времени на большинстве работ, над которыми вы когда-либо будете работать,и часто очень трудно объяснить а) что происходит, и б) почему это хорошая идея для коллег.