Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция. ее имя и (). Когда ставить? Когда не ставить? (https://javascript.ru/forum/misc/22898-funkciya-ee-imya-i-kogda-stavit-kogda-ne-stavit.html)

jsuse 04.11.2011 17:15

Функция. ее имя и (). Когда ставить? Когда не ставить?
 
Еще пример из того же раздела http://beta.javascript.ru/tutorial/this

var user = {
firstName: "Вася"
};

function func() {
alert( this.firstName );
}

user.sayHi = func;

(); // this = user


Не понимаю вот что. Вот создается новое свойство user.sayHi. Свойству присваивается функция func. Почему тогда пишется user.sayHi = func, а не user.sayHi = func() ? Ведь выше в коде она определяется как function func(), со скобками т.е., а при sayHi уже без скобок.

И почему для вызова свойства нужны скобки? user.sayHi(), а не user.sayHi. То есть свойство объекта становится функцией? Или наследует свойства функции? Или просто в таком случае к нему обращаться нужно как к функции, хотя это всего лишь свойство?

ksa 04.11.2011 19:06

Цитата:

Сообщение от jsuse
Почему тогда пишется user.sayHi = func, а не user.sayHi = func() ?

// Свойство стало методом
user.sayHi = func

...
// Свойству присвоили значение, которое вернула функция
user.sayHi = func()

Цитата:

Сообщение от jsuse
И почему для вызова свойства нужны скобки? user.sayHi(), а не user.sayHi.

Потому как это уже метод... :)

Aetae 04.11.2011 19:18

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'))


Часовой пояс GMT +3, время: 20:07.