Переписать из вне функцию, находящуюся внутри другой функции
Привет, есть код вроде такого:
obj.original = functin() { function oldCompute(){}; // Оригинальная функция, поведение которой надо изменить function other1(){}; function other2(){}; return /* Какие-то вычисления с использованием этих функций */; } Можно ли как-нибудь изменить поведение функции oldCompute, не влезая в исходный код? Перезаписать/заменить ее своей функцией? "Извне" слитно пишется. Ошибся :( |
в вашем случаи функция oldCompute глобальная и к ней обратиться можно откуда угодно, так же и изменить
просто переопределите её ниже и всё |
Ой, щас я допишу, что б было яснее :)
В первом скрипте к глобальному объекту (jquery, что уж там скрывать) дописывается один метод (original). И этот скрипт мне не хочется менять. Следом я подключаю свой скрипт, когда уже у jquery есть метод original. Как мне можно изменить заменить oldCompute? Может быть я сильно торможу, заранее сорри, если так :) Цитата:
|
Если это невозможно, то так и скажите, но не томите)
|
function f(){ return 1; } function f(){ return 2; } alert(f()); |
var obj= {}; obj.original = function() { function oldCompute(){ return "Я глобальная функция хоть и в теле другой и всем пофиг где я лежу"; } function other1(){} function other2(){} } function oldCompute(){ return "Надо всего лишь попробовать."; } alert(oldCompute()); |
var obj= {}; obj.original = function() { function oldCompute(){ return "Я глобальная функция хоть и в теле другой и всем пофиг где я лежу"; } function other1(){return "other1"; } function other2(){return "other2"; } return oldCompute() + "\n" + other1() + "\n" + other2(); } function oldCompute(){ return "Надо всего лишь попробовать."; } alert(oldCompute()); alert(obj.original()); // :( Последний алерт вернул не то, что надо (первоначальный код функции). Поправьте, если не прав, но не получится изменить результат выполнения obj.original(), т.к. функция oldCompute() находится во внутренней области видимости. Просто, я надеялся, что может быть я что-то не до конца знаю. |
Цитата:
original = function(){ function oldCompute(){}; return 1; } alert(typeof oldCompute); original(); // ладно, может появится после вызова alert(typeof oldCompute); |
балерун,
ну понятное дело, так как в этой функции идёт обьявление другой. obj.original = function(){ // А это переопределить нельзя? } var obj= {}; obj.original = function() { function oldCompute(){ return "Я глобальная функция хоть и в теле другой и всем пофиг где я лежу"; } function other1(){return "other1"; } function other2(){return "other2"; } return oldCompute() + "\n" + other1() + "\n" + other2(); } function oldCompute(){ return "Надо всего лишь попробовать."; } alert(obj.original()); obj.original = function() { function oldCompute(){ return "Надо всего лишь попробовать 2."; } function other1(){return "other1"; } function other2(){return "other2"; } return oldCompute() + "\n" + other1() + "\n" + other2(); } alert(obj.original()); |
Цитата:
кстати оба алерта undefined O_o А так работает: original = function(){ oldCompute = function(){}; return 1; } alert(typeof oldCompute); original(); // ладно, может появится после вызова alert(typeof oldCompute); |
Часовой пояс GMT +3, время: 20:26. |