Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отловить запуск функции (https://javascript.ru/forum/misc/66405-otlovit-zapusk-funkcii.html)

tenebrosus 13.12.2016 13:11

Отловить запуск функции
 
Подскажите, можно поймать вызов знаемой функии без редактирования самой функции, только по названию? Если запустилась функция, запустить другую

ksa 13.12.2016 13:55

Цитата:

Сообщение от tenebrosus
можно поймать вызов знаемой функии без редактирования самой функции, только по названию?

Нет. :no:

Coriolan161 13.12.2016 16:51

tenebrosus,
Можно положить во внутрь отлавливаемой функции вызов другой функции)))

MallSerg 13.12.2016 17:04

Цитата:

Сообщение от ksa (Сообщение 437896)
Нет. :no:

Ну почему же так категорично?

<script>
function Fun1 (){alert("this Fun1")};
function Fun2 (){alert("this Fun2")};
function Fun3 (){alert("this Fun3")};

-function(){
	var z ={};
	window.hunt=function (n,cb){
		z[n]=window[n];
		window[n]= function(){cb();z[n]()};
	};
}();

</script>
</body>
<input type="button" value="вызов Fun1" onclick="Fun1()">
<input type="button" value="вызов Fun2" onclick="Fun2()">
<input type="button" value="вызов Fun3" onclick="Fun3()">
<br><br><br>
<input type="button" value="переопределить Fun1" onclick='hunt("Fun1",function(){alert("поймать вызов Fun1")})'>
<input type="button" value="переопределить Fun2" onclick='hunt("Fun2",function(){alert("поймать вызов Fun2")})'>
<input type="button" value="переопределить Fun3" onclick='hunt("Fun3",function(){alert("поймать вызов Fun3")})'>


Такое решение просто ужасно для реальной работы но в качестве примера самое то :lol:
Есть еще куча нюансов с переменными и областью видимости (советую гуглить в сторону «JS bind»)

Malleys 13.12.2016 19:21

function fn() {
    alert("Hello!");
}

fn = new Proxy(fn, {
    apply: function(method, context, args) {
        alert("fn was invoked");
        method();
    }
});

fn();

ksa 14.12.2016 08:38

Цитата:

Сообщение от MallSerg
Ну почему же так категорично?

Потому что это факт. :D
Цитата:

Сообщение от MallSerg
Такое решение просто ужасно для реальной работы но в качестве примера самое то

1. У тебя ооочень частный случай. Функции объявлены в глобальной области видимости.
2. Ты таки поменял те функции, а по условию ТСа этого делать нельзя

ksa 14.12.2016 08:39

Malleys, такая же фигня...
Цитата:

Сообщение от ksa
Ты таки поменял те функции, а по условию ТСа этого делать нельзя

И имя функции "вдруг" стало доступно для ее переопределения. Поскольку "место перехвата" не всегда имеет доступ к нужным именам... :(

MallSerg 14.12.2016 09:56

Цитата:

Сообщение от ksa
2. Ты таки поменял те функции, а по условию ТСа этого делать нельзя

Это наглая лож функции остались неизменны. изменяются только свойства объекта window которые хранят ссылки на эти функции

Случай не случайно ооочень чатсный =)

ksa 14.12.2016 10:24

Цитата:

Сообщение от MallSerg
изменяются только свойства объекта window которые хранят ссылки на эти функции

Да как не назови - суть от этого не меняется... :D


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