Как вызывается функция?
Вот задался я вопросом.
Есть некая функция 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 |
Цитата:
|
Прикладного значения нет. Просто вдруг об этом задумался, сам решить не смог и решил спросить здесь.
|
О том, как вызвана функция, должны говорить параметры. В любом случае сама она об этом ничего не знает.
|
Часовой пояс GMT +3, время: 07:18. |