为什么';在数组中使用javascript函数不起作用吗?

为什么';在数组中使用javascript函数不起作用吗?,javascript,arrays,function,Javascript,Arrays,Function,我正在尝试创建一个函数数组,以便根据索引调用一个函数。 设置功能不起作用。setF1和setF2函数不起作用。 是什么样的设计决策使事情以这种方式运行 您可以在jrootham.tjddev.net/test/test.html上找到测试页面 我似乎无法将测试代码粘贴到这里 <!DOCTYPE HTML> <html> <head> <script type="text/javascript"> var thing =

我正在尝试创建一个函数数组,以便根据索引调用一个函数。 设置功能不起作用。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>

变量事物=
{
f1:函数(){alert(1);},
f2:函数(){alert(2);},
setF1:function(){this.call=this.f1;},
setF2:function(){this.call=this.f2;},
列表:[this.f1,this.f2],
set:function(index){this.call=this.list[index];},
呼叫:this.f1
}
设置0
第1组
集合F1
集合F2
呼叫

这不起作用的原因是
调用的上下文中的
this
:this.f1
实际上引用的是
窗口
,而不是
东西

仅在
东西
的成员函数中引用
东西

不过,以下措施可行:

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];

{}
创建一个
对象
<代码>[]创建一个
数组
。两者之间存在显著差异。内部内容:[this.f1,this.f2]不起作用,因为this==窗口;[thing.f1,thing.f2]无法工作,因为尚未定义thing。