Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.04.2011, 12:55
Аватар для балерун
Аспирант
Отправить личное сообщение для балерун Посмотреть профиль Найти все сообщения от балерун
 
Регистрация: 16.11.2009
Сообщений: 79

Переписать из вне функцию, находящуюся внутри другой функции
Привет, есть код вроде такого:
obj.original = functin()
{
    function oldCompute(){}; // Оригинальная функция, поведение которой надо изменить
    function other1(){};
    function other2(){};
    return /* Какие-то вычисления с использованием этих функций */;
}


Можно ли как-нибудь изменить поведение функции oldCompute, не влезая в исходный код? Перезаписать/заменить ее своей функцией?

"Извне" слитно пишется. Ошибся
Ответить с цитированием
  #2 (permalink)  
Старый 14.04.2011, 13:02
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

в вашем случаи функция oldCompute глобальная и к ней обратиться можно откуда угодно, так же и изменить
просто переопределите её ниже и всё
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 14.04.2011, 13:08
Аватар для балерун
Аспирант
Отправить личное сообщение для балерун Посмотреть профиль Найти все сообщения от балерун
 
Регистрация: 16.11.2009
Сообщений: 79

Ой, щас я допишу, что б было яснее

В первом скрипте к глобальному объекту (jquery, что уж там скрывать) дописывается один метод (original). И этот скрипт мне не хочется менять. Следом я подключаю свой скрипт, когда уже у jquery есть метод original. Как мне можно изменить заменить oldCompute? Может быть я сильно торможу, заранее сорри, если так

Сообщение от Skipp Посмотреть сообщение
в вашем случаи функция oldCompute глобальная и к ней обратиться можно откуда угодно, так же и изменить
просто переопределите её ниже и всё
Можно пример?
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2011, 10:29
Аватар для балерун
Аспирант
Отправить личное сообщение для балерун Посмотреть профиль Найти все сообщения от балерун
 
Регистрация: 16.11.2009
Сообщений: 79

Если это невозможно, то так и скажите, но не томите)
Ответить с цитированием
  #5 (permalink)  
Старый 15.04.2011, 10:32
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

function f(){
 return 1;
}
function f(){
 return 2;
}

alert(f());
__________________
.
Ответить с цитированием
  #6 (permalink)  
Старый 15.04.2011, 10:36
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 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.
Ответить с цитированием
  #8 (permalink)  
Старый 15.04.2011, 12:35
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Skipp
в вашем случаи функция oldCompute глобальная
Неправда.
original = function(){
    function oldCompute(){};
    return 1;
}

alert(typeof oldCompute);
original(); // ладно, может появится после вызова
alert(typeof oldCompute);
Ответить с цитированием
  #9 (permalink)  
Старый 15.04.2011, 12:35
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 15.04.2011, 12:40
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача функции другой функции ntro123 jQuery 3 20.02.2011 12:15
Вызов функции вне html объекта arwprod jQuery 25 05.10.2010 00:14
Область видимости внутри функции YISHIMITSY Общие вопросы Javascript 1 25.08.2010 06:50
Вызов функции, находящейся в другой функции ZneP Events/DOM/Window 6 24.08.2010 18:45
Вызов функции из другой функции.. ?? glutton Общие вопросы Javascript 3 21.08.2009 22:33