Почему это использование функций JavaScript в массиве не работает? - PullRequest
0 голосов
/ 17 декабря 2010

Я пытаюсь создать массив функций, чтобы я мог вызывать их в зависимости от индекса.Функция set не работает.Функции setF1 и setF2 делают.Какое дизайнерское решение заставило все работать таким образом?

Вы можете найти тестовую страницу по адресу jrootham.tjddev.net/test/test.html

Я не могу вставитьтестовый код здесь.

<!DOCTYPE HTML>
<html>     
  <head>    
  <script type="text/javascript">
  var thing =
  {
    f1 : function() {alert(1);},
    f2 : function() {alert(2);},
    setF1 : function() {this.call = this.f1;},
    setF2 : function() {this.call = this.f2;},
    list : [this.f1, this.f2],
    set: function(index){this.call=this.list[index];},
    call : this.f1
  }
  </script>     
  </head>     
  <body>
    <button type="button" onClick="thing.set(0)">Set 0</button>     
    <button type="button" onClick="thing.set(1)">Set 1</button>     
    <button type="button" onClick="thing.setF1()">Set F1</button>     
    <button type="button" onClick="thing.setF2()">Set F2</button>     
    <button type="button" onClick="thing.call()">Call</button>     
  </body>
</html>

1 Ответ

2 голосов
/ 17 декабря 2010

Причина, по которой это не работает, заключается в том, что this в контексте call:this.f1 фактически ссылается на window и , а не thing.

thisссылается только на thing из внутри thing функций-членов.

Следующие будут работать , однако:

var thing = { //watch out for semicolon insertion...
  f1 : function() {alert(1);},
  f2 : function() {alert(2);},
  setF1 : function() {this.call = this.f1;},
  setF2 : function() {this.call = this.f2;},
  set: function(index){ this.call=this.list[index]; },
  call : function() {
     this.f1();
  }
};
thing.list = [thing.f1, thing.f2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...