【问题标题】:Calling a function within a Nested Object在嵌套对象中调用函数
【发布时间】: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


【解决方案1】:

尝试这样做:

var views = {
   settings: {
    init: function() {
        var withThing = 'withThing';
        this.doSomething(withThing);
    },

    doSomething: function(withThing) {
      // NEVER GETS CALLED
        alert(withThing)
    }
  }
};

views.settings.init();

这是jsfiddle

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2014-03-04
    • 2017-01-28
    • 2012-08-28
    • 2021-06-06
    • 1970-01-01
    • 2010-09-30
    • 2019-12-16
    • 2017-06-21
    相关资源
    最近更新 更多