дело в инкапсуляции.
у объекта могут быть открытые (публичные) и закрытые (приватные) свойства/методы.
в JS это слабее выражено (но это можно имитировать), но в других языках такие модификаторы есть.
разница в том что открытые свойства доступны любому другому объекту/методу, взаимодействующему с изначальным объектом. аналогично и публичные методы нужны для открытого взаимодействия. приватные нужны только для себя, также как и некоторые методы нужны только внутри объекта но не снаружи.
использовать ли для объектов свойства? можно вообще не использовать. вместо этого используй чтения-записи значений. однако это усложняет код.
если пишешь код на публику - тогда делай эти методы.
если пишешь код в своем маааленьком приложении - смысла в этом мало.
пример закрытых и открытых свойств. на самом деле "во внешний мир" отдается другой объект, однако это не значит что он перестал "работать".
var TheConstructor = function(params) {
var
happinessCap = 100,
desireCap = 100,
ageFactor = (function(age) {
return 33 / age;
})(params.age),
maxAge=45,
minAge=18,
woman = {
_age: params.age,
_happiness: 42,
_desire: 0,
bitchCoeff: params.bitchCoeff
};
woman.dance = function() {
woman._happiness += woman._age / woman.bitchCoeff;
if (woman._happiness >= happinessCap) {
woman._happiness = happinessCap;
}
}
woman.drinkAlcohol = function() {
if(woman._age<minAge){
throw new AgeRestriction(woman._age);
}
if(woman._age>maxAge){
return;
}
woman._desire += woman._age * ageFactor / woman.bitchCoeff;
if (woman._desire >= desireCap) {
woman._desire = desireCap;
}
}
woman.isAccessible = function() {
return (woman._happiness == happinessCap && woman._desire == desireCap);
}
return {
dance: woman.dance,
drink: woman.drinkAlcohol,
isAccessible: woman.isAccessible,
own:function(){
return (woman.bitchCoeff<1)?woman:{};
}
}
}
function seduce(woman){
var maxAttempts = 5;
for(var i = 1;i<=maxAttempts;i++){
woman.drink();
woman.dance();
if(woman.isAccessible()){
console.log(woman.name + " has been seducted after "+i+" attempts!");
console.info(woman.own());
return true;
}
}
console.error(woman.name + " is a frigid bitch!");
return false;
}
var cheerLeader = new TheConstructor({age:20,bitchCoeff:0.25})
cheerLeader.name = "Masha";
seduce(cheerLeader);
var businessWoman = new TheConstructor({age:33,bitchCoeff:2.5})
businessWoman.name="Olga Victorovna";
seduce(businessWoman);
var schoolTeacher = new TheConstructor({age:27,bitchCoeff:1.1})
schoolTeacher.name="Valentina";
seduce(schoolTeacher);
------------
свойства начинаются с мелкой буквы, являются именами существительными, если больше 1 слова пишется кемел-кейс.
приватные свойства начинаются с подчеркивания (так проще различать). например
если юзаешь джиквери - есть негласное соглашение (а может где то и зафиксировано), что свойство или переменная содержащая джиквери объект начинается с $, например this.$container = $('.container');
-------------
методы - тоже начинаются с мелкой буквы, являются глаголами. если больше 1 слова пишется кемел-кейс, первое слово всеравно глагол, остальные могут быть существительными. например this.getStorageData('orders'), типа, получить данные (заказы) из хранилища.
есть еще методы - конструкторы. это методы объекта которые возвращают не просто результат, а целый новый объект, в который напиханы разные свойства. методы конструктора обычно начинают с БольшойБуквы.
например
this.BuildWidget = function(widgetParams){ var widget={params:widgetParams}; ... ; return widget; }.
-------------