Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вызывается функция? (https://javascript.ru/forum/misc/7237-kak-vyzyvaetsya-funkciya.html)

Мараторий 22.01.2010 05:13

Как вызывается функция?
 
Вот задался я вопросом.
Есть некая функция f().
Я насчитал 3 возможных вызова этой функции (может еще есть?)
1) f()
2) new f()
3) f.call(obj) или f.apply(obj)

Как внутри функции узнать каким из трех вызовов воспользовались?

У меня не получилось. Пока вышло вот что:
function f() {
  if(this == window) {
    alert("Вызов f()");
  } else if(this.constructor == arguments.callee) {
      alert("Вызов new f()");
    } else {
        alert("Вызов f.call(obj) или f.apply(obj)");
      }
}

f(); // Вызов f()
var o1 = new f(); // Вызов new f()
f.call({}); // Вызов f.call(obj) или f.apply(obj)

// Вроде как работает, однако
f.call(o1); // Вызов new f()
// Поведение абсолютно понятное, поскольку o1.constructor действительно f

B~Vladi 22.01.2010 08:37

Цитата:

Сообщение от Мараторий
Как внутри функции узнать каким из трех вызовов воспользовались?

Бред какой-то... Зачем тебе это?

Мараторий 22.01.2010 13:08

Прикладного значения нет. Просто вдруг об этом задумался, сам решить не смог и решил спросить здесь.

B~Vladi 22.01.2010 13:18

О том, как вызвана функция, должны говорить параметры. В любом случае сама она об этом ничего не знает.


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