14.04.2011, 12:55
|
|
Аспирант
|
|
Регистрация: 16.11.2009
Сообщений: 79
|
|
Переписать из вне функцию, находящуюся внутри другой функции
Привет, есть код вроде такого:
obj.original = functin()
{
function oldCompute(){}; // Оригинальная функция, поведение которой надо изменить
function other1(){};
function other2(){};
return /* Какие-то вычисления с использованием этих функций */;
}
Можно ли как-нибудь изменить поведение функции oldCompute, не влезая в исходный код? Перезаписать/заменить ее своей функцией?
"Извне" слитно пишется. Ошибся
|
|
14.04.2011, 13:02
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
в вашем случаи функция oldCompute глобальная и к ней обратиться можно откуда угодно, так же и изменить
просто переопределите её ниже и всё
__________________
.
|
|
14.04.2011, 13:08
|
|
Аспирант
|
|
Регистрация: 16.11.2009
Сообщений: 79
|
|
Ой, щас я допишу, что б было яснее
В первом скрипте к глобальному объекту (jquery, что уж там скрывать) дописывается один метод (original). И этот скрипт мне не хочется менять. Следом я подключаю свой скрипт, когда уже у jquery есть метод original. Как мне можно изменить заменить oldCompute? Может быть я сильно торможу, заранее сорри, если так
Сообщение от Skipp
|
в вашем случаи функция oldCompute глобальная и к ней обратиться можно откуда угодно, так же и изменить
просто переопределите её ниже и всё
|
Можно пример?
|
|
15.04.2011, 10:29
|
|
Аспирант
|
|
Регистрация: 16.11.2009
Сообщений: 79
|
|
Если это невозможно, то так и скажите, но не томите)
|
|
15.04.2011, 10:32
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
function f(){
return 1;
}
function f(){
return 2;
}
alert(f());
__________________
.
|
|
15.04.2011, 10:36
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
var obj= {};
obj.original = function()
{
function oldCompute(){ return "Я глобальная функция хоть и в теле другой и всем пофиг где я лежу"; }
function other1(){}
function other2(){}
}
function oldCompute(){ return "Надо всего лишь попробовать."; }
alert(oldCompute());
__________________
.
Последний раз редактировалось Skipp, 15.04.2011 в 10:38.
|
|
15.04.2011, 11:46
|
|
Аспирант
|
|
Регистрация: 16.11.2009
Сообщений: 79
|
|
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() находится во внутренней области видимости. Просто, я надеялся, что может быть я что-то не до конца знаю.
Последний раз редактировалось балерун, 15.04.2011 в 11:48.
|
|
15.04.2011, 12:35
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от Skipp
|
в вашем случаи функция oldCompute глобальная
|
Неправда.
original = function(){
function oldCompute(){};
return 1;
}
alert(typeof oldCompute);
original(); // ладно, может появится после вызова
alert(typeof oldCompute);
|
|
15.04.2011, 12:35
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
балерун,
ну понятное дело, так как в этой функции идёт обьявление другой.
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());
__________________
.
Последний раз редактировалось Skipp, 15.04.2011 в 12:43.
|
|
15.04.2011, 12:40
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
Сообщение от B@rmaley.e><e
|
Неправда.
|
ну это по-тому, что она не была объявлена, а так-то она глобальная
кстати оба алерта undefined O_o
А так работает:
original = function(){
oldCompute = function(){};
return 1;
}
alert(typeof oldCompute);
original(); // ладно, может появится после вызова
alert(typeof oldCompute);
__________________
.
Последний раз редактировалось Skipp, 15.04.2011 в 12:55.
|
|
|
|