Вопрос: Как различать методы и свойства в ооп?

Лучший ответ:
свойства - какие-то данные класса (имя, возраст, пол и тд)методы - какие-то действия класса (Сходить, вызвать, погавкать, прыгнуть и тд)

Худший ответ:
дело в инкапсуляции.
у объекта могут быть открытые (публичные) и закрытые (приватные) свойства/методы.
в 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; }.
-------------