2014-01-29 217 views
0

我有一個嵌套在父對象中的對象。內部對象有兩個功能,一個需要調用另一個。我以爲我可以打電話this.theFunction(),但似乎並非如此。調用嵌套對象中的函數

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

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

在這種情況下,this似乎引用DOMWindow而非views.settings對象作爲我所期待的。我錯過了什麼?

UPDATE

views.settings.init()功能被稱爲回調。外部進程調用template.init(view, views.settings.init);。後者的觀點是回調。在template.init()之內,回調函數簡稱爲callback()。爲了清楚(希望),這裏是我們如何去views.settings.init一個片段:

什麼會導致上下文迷路和我能做些什麼把它找回來,這樣this引用views.settings對象?

+2

無論在打電話的「初始化」功能,以這樣的方式失去上下文('this'值)這樣做。 'this'的默認值是全局上下文(除非你處於「strict」模式)。 – Pointy

+0

'views.settings.doSomething()'? – BenM

+1

也''與'是一個保留的關鍵字,請參閱http://stackoverflow.com/questions/61552/are-there-legitimate-uses-for-javascripts-with-statement – Biketire

回答

1

嘗試這樣做:

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

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

views.settings.init(); 

這裏有一個jsfiddle