2014-01-29 3 views
0

부모 객체 내에 중첩 된 객체가 있습니다. 내부 객체는 2 개의 함수를 가지며 하나는 다른 객체를 호출해야합니다. 내가 this.theFunction()라고 부를 수 있다고 생각했는데, 그럴 것 같지 않습니다. 이 경우 중첩 된 객체 내에서 함수 호출

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

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

this는 내가 기대 한대로 views.settings 객체가 아닌 DOMWindow을 참조 할 것. 내가 뭘 놓치고 있니? views.settings.init() 콜백 함수가 호출되는

UPDATE. 외부 프로세스는 template.init(view, views.settings.init);을 호출합니다. 후자의 인수는 콜백입니다. template.init()에서 콜백은 간단히 callback()이라고합니다.

template.init(view, views.settings.init); 
var template: { 
    init: function() { 
    callback(); 
    } 
} 

어떤 상황이 지워지 발생할 것이며, 제가 그래서 this 참조합니다 views.settings 개체를 다시 얻기 위해 수행 할 수 선명도 (희망)의 경우, 우리가 views.settings.init에 도착하는 방법의 조각이야? 이 일을

+2

입니다. 'this'의 기본값은 전역 컨텍스트입니다 ("strict"모드에 있지 않은 한). – Pointy

+0

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

+1

또한'with'는 예약어입니다. 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(); 

여기 당신의 "초기화"기능 컨텍스트 (은`this` 값)을 잃게하는 방식으로 그렇게되어 부르고 무엇이든 jsfiddle