【发布时间】:2014-01-29 14:57:51
【问题描述】:
我有一个对象,嵌套在父对象中。内部对象有 2 个函数,一个需要调用另一个。我以为我可以打电话给this.theFunction(),但事实并非如此。
var views = {
settings: {
init: function() {
this.doSomething(withThing);
},
doSomething: function(with) {
// NEVER GETS CALLED
}
}
};
在这种情况下,this 似乎引用了 DOMWindow 而不是我所期望的 views.settings 对象。我错过了什么?
更新
views.settings.init() 函数作为回调函数调用。外部进程调用template.init(view, views.settings.init);。后一个参数是一个回调。在template.init() 中,回调被简单地称为callback()。为了清楚起见(希望如此),这里是我们如何到达views.settings.init 的sn-p:
template.init(view, views.settings.init);
var template: {
init: function() {
callback();
}
}
什么会导致上下文丢失,我该怎么做才能找回它,以便this 引用views.settings 对象?
【问题讨论】:
-
调用你的“init”函数的方式是丢失上下文(
this值)。this的默认值是全局上下文(除非您处于“严格”模式)。 -
views.settings.doSomething()? -
还有
with是保留关键字,见stackoverflow.com/questions/61552/… -
已更新问题以尝试提供一些清晰度。我实际上并没有使用
with作为变量。在我的示例中,这是一个糟糕的选择。 :-)
标签: javascript tidesdk