Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.11.2011, 17:15
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

Функция. ее имя и (). Когда ставить? Когда не ставить?
Еще пример из того же раздела 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. То есть свойство объекта становится функцией? Или наследует свойства функции? Или просто в таком случае к нему обращаться нужно как к функции, хотя это всего лишь свойство?
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2011, 19:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

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

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

Сообщение от jsuse
И почему для вызова свойства нужны скобки? user.sayHi(), а не user.sayHi.
Потому как это уже метод...
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2011, 19:18
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

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'))
__________________
29375, 35

Последний раз редактировалось Aetae, 04.11.2011 в 19:21.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск