我在Backbone View中有一个从事件中调用的函数。 View中的不同函数基于名为selected
的var进行调用,因此我创建了一个查找表,将所选值的值路由到我的视图中:
var cases = {
'application' : this.choose_application,
'device' : this.choose_device,
'log' : this.choose_log,
'process' : this.choose_process,
'server' : this.choose_server,
'network' : this.choose_network
}
然后我调用函数:
var func = cases[selected];
func();
当查询表中的函数被调用时(例如this.choose_log
),this
函数中的choose_log
等于Window对象而不是View。
正如预期的那样,如果不是使用查找表,而是简单地调用this.choose_log()
,this
函数中的choose_log
等于视图。
如何在我的查找表中的所有函数中传递make this
等于View?更重要的是,为什么会发生这种情况?
答案 0 :(得分:1)
如何在查找表中的所有函数中传递make等于View?
使用cases[selected].call(this);
- 请参阅docs for call
。
更重要的是,为什么会发生这种情况?
因为this
keyword的值取决于函数的调用方式。在“通常”情况下,它确实按预期工作,因为您将函数作为方法 调用 View实例。