Переписать из вне функцию, находящуюся внутри другой функции
Привет, есть код вроде такого:
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, время: 13:44. |