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