Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.12.2016, 13:11
Аспирант
Отправить личное сообщение для tenebrosus Посмотреть профиль Найти все сообщения от tenebrosus
 
Регистрация: 30.01.2014
Сообщений: 82

Отловить запуск функции
Подскажите, можно поймать вызов знаемой функии без редактирования самой функции, только по названию? Если запустилась функция, запустить другую
Ответить с цитированием
  #2 (permalink)  
Старый 13.12.2016, 13:55
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,212

Сообщение от tenebrosus
можно поймать вызов знаемой функии без редактирования самой функции, только по названию?
Нет.
Ответить с цитированием
  #3 (permalink)  
Старый 13.12.2016, 16:51
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

tenebrosus,
Можно положить во внутрь отлавливаемой функции вызов другой функции)))
Ответить с цитированием
  #4 (permalink)  
Старый 13.12.2016, 17:04
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от ksa Посмотреть сообщение
Нет.
Ну почему же так категорично?

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


Такое решение просто ужасно для реальной работы но в качестве примера самое то
Есть еще куча нюансов с переменными и областью видимости (советую гуглить в сторону «JS bind»)
Ответить с цитированием
  #5 (permalink)  
Старый 13.12.2016, 19:21
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

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

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

fn();
Ответить с цитированием
  #6 (permalink)  
Старый 14.12.2016, 08:38
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,212

Сообщение от MallSerg
Ну почему же так категорично?
Потому что это факт.
Сообщение от MallSerg
Такое решение просто ужасно для реальной работы но в качестве примера самое то
1. У тебя ооочень частный случай. Функции объявлены в глобальной области видимости.
2. Ты таки поменял те функции, а по условию ТСа этого делать нельзя
Ответить с цитированием
  #7 (permalink)  
Старый 14.12.2016, 08:39
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,212

Malleys, такая же фигня...
Сообщение от ksa
Ты таки поменял те функции, а по условию ТСа этого делать нельзя
И имя функции "вдруг" стало доступно для ее переопределения. Поскольку "место перехвата" не всегда имеет доступ к нужным именам...

Последний раз редактировалось ksa, 14.12.2016 в 08:41.
Ответить с цитированием
  #8 (permalink)  
Старый 14.12.2016, 09:56
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

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

Случай не случайно ооочень чатсный =)
Ответить с цитированием
  #9 (permalink)  
Старый 14.12.2016, 10:24
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,212

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск функции по клику vmetnev@mail.ru Events/DOM/Window 2 28.05.2016 12:14
Запуск функции mrKot Общие вопросы Javascript 3 16.01.2016 06:17
Запуск функции после загрузки дива qwe88 Общие вопросы Javascript 18 01.09.2015 10:40
Запуск Lightbox вручную из функции ZneP Events/DOM/Window 2 12.08.2010 18:26
Запуск функции если mouseout frolvict Общие вопросы Javascript 10 27.04.2010 17:16