Jump to content
  • 0

как узнать имя функции из функции


iillyyaa2
 Share

Question

немного не корректное название темы, суть такова:

..
<div id='bb'></div>
<script>
var dd = {};
var xx = 0;
dd.aa = function() {
document.getElementById('bb').innerHTML+=xx;
xx++;
if (xx < 3) {
setTimeout(this,1000);
} else {
alert(xx);
}
};
dd.aa();
</script>

в this попадает ВЕСЬ объект dd, а как узнать, какое значение объекта ?

как узнать aa ??

или может есть другой способ ?

мне нужно в случае необходимости запустить ещё раз эту функцию, и хотелось бы, что бы её имя не надо было писать самому.

Edited by iillyyaa2
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Функция выполняется в другом контексте, отличном от контекста, в котором задается setTimeout. Вам нужна промежуточная переменная:


var dd = {};
var xx = 0;
dd.aa = function () {
xx++;
if (xx < 3) {
setTimeout(obj.aa, 1000);
} else {
alert(xx);
}
};
var obj = dd;
dd.aa();

Или так:


var dd = {};
var xx = 0;
dd.aa = function () {
xx++;
var self = this;
if (xx < 3) {
setTimeout(function () { self.aa(); }, 1000);
} else {
alert(xx);
}
};
dd.aa();

Edited by Odrin
Link to comment
Share on other sites

  • 0

Odrin, а как узнать этот aa ?

код будет вставляться как универсальный в десяток функций, на ошибку связи и хотелось бы не указывать имени функции

nerv, вроде оно, и работает великолепно, то что доктор прописал ;)

..
<style>div {border:1px solid;}</style>
<div id='bb'></div>
<div id='bb2'></div>
<script>
var dd = {};
var xx = 0;
dd.aa = function(dd) {
document.getElementById('bb').innerHTML+=xx+'<br>';
xx++;
if (xx < 5) {
document.getElementById('bb2').innerHTML+=arguments[0]+'<br>';
var value = arguments[0];
var fun = arguments.callee;
setTimeout(function(){fun(value);},1000);
return;
} else {
alert(xx);
}
};
dd.aa(77);
</script>

ЗЫ интересно, что в парсере code заставляет "падать" на следующую строку - ';

Edited by iillyyaa2
Link to comment
Share on other sites

  • 0

всё гуд, но блин, у меня оказалось в функцию вложена функция... как узнать родителя функции ? :)

что то я этот факт не учёл...

тоесть, в этой функции запускается анонимная функция... вот как узнать родителя этой анонимной фунции, ту, кто запустил её

Edited by iillyyaa2
Link to comment
Share on other sites

  • 0

всё гуд, но блин, у меня оказалось в функцию вложена функция... как узнать родителя функции ? :)

что то я этот факт не учёл...

тоесть, в этой функции запускается анонимная функция... вот как узнать родителя этой анонимной фунции, ту, кто запустил её

Не мучайся, используй замыкания.

Link to comment
Share on other sites

  • 0

может перед запуском анонимной функции создавать локальные переменные, которые будут видны из анонимной функции ?

var value = arguments[0];
var fun = arguments.callee;

и уже из этой анонимной запускать так же

setTimeout(function(){fun(value);},1000);

ЗЫ проканало ;)

Edited by iillyyaa2
Link to comment
Share on other sites

  • 0

iillyyaa2, можно поинтересоваться, зачем Вы здесь используете обертку?

setTimeout(function(){fun(value);}, 1000);

что бы передать переменную, на случай, если в функцию входит переменная, в 1 функции у меня входит, в остальных нет.

иначе вроде setTimeout не принимает переменную

может просто

setTimeout(arguments.callee, 1000);

Какая вообще задача стоит?

говорю, этот таймаут внутри ещё одной функции... и видит он тогда новую функцию...

пришлось объявить переменные перед той функцией и уже вызывать так.

а задача... работа с api вконтакте.. в случае если ошибка, повторить запрос снова. ошибка "слишком много соединений в 1 секунду"

при загрузке приложения сразу несколько запросов, на случай если будет ошибка, повторить запрос через секунду и получив данные уже сформировать страницу верно.

вот примерно такая функция:

var myf = {};
myf.vkApi0007 = function() {
var value = arguments[0];
var fun = arguments.callee;
VK.api("getVariables", {key:5,count:5}, function(data){
if (data.error) {
if (data.error.error_code) {
if (data.error.error_code == 6) {
setTimeout(function(){fun(value);},1000);
return;
}
}
}
});
// тут обрабатываем данные
};

данная функция великолепно работает.. пробовал отправить 8 запросов, так те, что не удачные были, завершились через 1-2 секунды

всё гуд!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy