在Backbone View中使用查找表调用函数不会将“this”(视图)传递给函数

时间:2014-02-06 22:01:49

标签: javascript backbone.js

我在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?更重要的是,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

  

如何在查找表中的所有函数中传递make等于View?

使用cases[selected].call(this); - 请参阅docs for call

  

更重要的是,为什么会发生这种情况?

因为this keyword的值取决于函数的调用方式。在“通常”情况下,它确实按预期工作,因为您将函数作为方法 调用 View实例。