user.js - переопределить функцию
Доброго времени суток.
Пишу для себя небольшой user.js и возникла необходимость изменить поведение одной из функций на сайте. Функция "вложеная" и конструкция выглядит следующим образом: Код:
function vB_Inline_Mod(A, B, C, D) { |
TestUser013,
vB_Inline_Mod замените на нужную вам функцию |
Я правильно понял? Скопировать целую vB_Inline_Mod и добавить в нее одну строчку? Она относительно большая... У меня скрипт на 100 строчек, а эта функция на 500. Неужели нет способа изменить только check_all?
|
TestUser013,
да правильно ... возможно есть иной способ |
можно попробовать так:
var old_vB_Inline_Mod = vB_Inline_Mod; vB_Inline_Mod = function(A, B, C, D) { var r = old_vB_Inline_Mod.apply(this, arguments); var old_check_all = this.check_all; this.check_all = function (J, G, H) { var r = old_check_all.apply(this, arguments); // вот прямо сюда добавляем свою строчку кода return r; }; return r; }; |
ТС, тебе просто повезло, что есть функция с именем. Имени может и не быть.
|
vB_Inline_Mod.check_all = myFunction;:) |
Poznakomlus, хороший прикол, типа "мама роди меня взад". Да и профессор Яростный Меч мог не угадать. Если в функции есть this, то без конструирования this снаружи - undefined, а конструирование к тому моменту, когда user.js полезет заменять что-то, может быть уже завершено. Да и вообще это сугубо частный случай. Решение более общего порядка - найти эти самые вызовы и запускать их самому со своими параметрами и под своим контекстом.
То есть найти куда втыкается vB_Inline_Mod и где воткнутое вызывается, подготовить для вызова все переменные и вызывать самому ПОСЛЕ. PS Быстрый поиск показал, что оно на самом деле конструируется, inlineMod = new vB_Inline_Mod('inlineMod', 'post',... то есть надо найти готовый объект и в нем уже можно будет заменить метод. |
Спасибо огромное за помощь :)
Я добился приемлемого результата. Сначала переопределил всю функцию и сработало. Но после последнего поста переделал - циклом пробегаюсь по всем вызовам функции и заменяю ее на свою. Не пробовал варианта с поста #5, но возьму на заметку, возможно пригодится в будущем. Спасибо :) |
Часовой пояс GMT +3, время: 07:48. |