Подмена функции
Добрый день.
Я пишу JavaScript для Tampermonkey (UserJS) и передо мной возникла такая проблема: На сайте, с которым я работаю, есть функция old, которая вызывает alert, после чего исполнение скрипта, естественно, останавливается. Выглядит это так: function old (param) { // Код до алерта alert ('Алерт'); // Код после алерта } Мне нужно подменить эту функцию на свою (в которой не будет alert'а). Пробовал так: function old (param) { // Код до алерта alert ('Алерт'); // Код после алерта } old = function (param){ // Код до алерта // Код после алерта } Почему то не выходит, хотя, вроде бы, и должно. Выполняется старая функция (с алертом). |
смотря где эта функция находится, может внутри какогото объекта
|
Функция глобальная, то есть находится просто в <script></script>.
А вызов функции происходит OnClick'ом при нажатии на кнопку (хотя это, по моему, не важно). |
переопределять функцию надо ДО того как ее привяжут к событию!
<html> <head> <title>example</title> <style> .big_container { width: 300px; height: 300px; border: 1px solid black; } </style> </head> <body> <div class="big_container"></div> <script> function one () { console.log(1); } document.querySelector('.big_container').onclick = one; one = function () { console.log(2); } </script> </body> </html> |
Либо переопределять просто созданием функции с таким же именем.
<html> <head> <title>example</title> <style> .big_container { width: 300px; height: 300px; border: 1px solid black; } </style> </head> <body> <div class="big_container"></div> <script> function one() { console.log(1); } document.querySelector('.big_container').onclick = one; function one() { console.log(2); } </script> </body> </html> Дело в том, что интерпретатор сначала считывает всю область видимости, определяет именнованные функции, и только потом начинает выполнение кода. |
При запуске вашего примера в консоль, почему то выводится весь его код, но смысл я понял. Большое спасибо за помощь.
|
Цитата:
<style> .big_container { width: 300px; height: 300px; border: 1px solid black; } </style> <div class="big_container"></div> <script> function one() { alert(1); } document.querySelector('.big_container').onclick = one; </script> <script> // что за мудацкий стиль оформления кода??? function one() { console.log(2); } </script> |
Цитата:
В JavaScript операция (присваивания "=") присваивает переменным ссылку на объект для объектов для примитивных типов копирует по значению т.е. на пальцах объект.onclick = old //приведет к тому что в onclick будут хранится ссылка на функциюесли после этого глобальному свойству "old" присвоить любое значение то это ни как не повлияет на функцию на которую раньше указывало свойство "old" а в onclick хранится именно ссылка |
MallSerg,
Ты щечки то немного сдуй. Ты ни хера не понимаешь, что происходит. Цитата:
В этом контексте, нет никакой разницы, в каком объекте ты определил что-либо. в одном случае это будет global.old в другом -- object.old никакой разницы нет. Спорить я не буду, сразу говорю -- ты баран. |
Цитата:
|
Часовой пояс GMT +3, время: 20:29. |