jsuse, вы слишком мудрите. В js объекты передаются по ссылке.
func - ссылка на функцию.
func() - запуск исполнения функции(возвращает результат)
Если совсем упростить: в данном случае свойство sayHi просто становится ссылкой на ту же функцию, что и func. И соответственно данная функия может быть запущена как user.sayHi() и будет выполняться в контексте user .
В скобки как обычно передаются параметры(если что).
var firstName="Даздраперма";
var user = {
firstName: "Вася"
};
function func() {
return this.firstName;
}
user.sayHi = func;
alert([
'func: '+ func,
'func(): '+func(),
'user.sayHi(): '+user.sayHi()
].join('\n\n'))