Подмена функции
Добрый день.
Я пишу 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, время: 22:14. |