Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   область видимости (https://javascript.ru/forum/misc/40089-oblast-vidimosti.html)

worldown 23.07.2013 16:44

область видимости
 
Здравствуйте. Столкнулся с проблемой.


<script>
function fOne(fTwo){           
  var i = 'foo';
  fTwo(i);
}

var mOne = {
  b: '',
  a: fOne(function(result){
  this.b = result;

   })
}

window.onload = function(){
  mOne.a;
  setTimeout('alert(mOne.b)',2000);
}
</script>

В "mOne.b" пустая строка :( ;
Вопрос: Как передать в "mOne.b" строку "foo" ? Спасибо.

skrudjmakdak 23.07.2013 17:29

ну так функцию наверное вызвать надо:
fOne(function(result){
  return result;
   }(сюда параметр передаем))

skrudjmakdak 23.07.2013 17:31

хотя честно говоря, у вас черт ногу сломит)) переписывать все надо)

worldown 23.07.2013 17:38

Спасибо. Простите... Что-то я не понял... Не могли бы поподробней?

worldown 23.07.2013 17:40

А в чем именно непонятно?, вроде простой код, но вот нифига не перелетает строка 'foo' в свойство mOne.b. Хотя поверьте код рабочий!

рони 23.07.2013 18:31

worldown,
:write:
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
<script>

function fOne(i){
  this.b = i
}

var mOne = {
  b: '',
  a: fOne
}

window.onload = function(){
  mOne.a('foo');
  setTimeout(function ()
{
  alert(mOne.b)
},2000);
}
</script>
</head>

<body>
</body>

</html>

worldown 23.07.2013 20:11

рони,
спасибо. Но нужно именно реализовать в той конструкции... т.е что бы было
fOne(fTwo){...

worldown 23.07.2013 20:46

Всем спасибо. Вот решение:
<script>
function fOne(fTwo){           
  var i = 'foo';
  fTwo(i);
}

var mOne = {
  b: '',
  a: function(){ fOne(function(result){
  this.b = result;
   }.bind(this))
  }
}

window.onload = function(){
  mOne.a();
  setTimeout('alert(mOne.b)',2000);
}
</script>


http://learn.javascript.ru/bind

ksa 23.07.2013 22:26

Цитата:

Сообщение от skrudjmakdak
хотя честно говоря, у вас черт ногу сломит))

Цитата:

Сообщение от worldown
Хотя поверьте код рабочий!

Ну да, ну да... :D


Часовой пояс GMT +3, время: 17:56.