2014-01-29 3 views
0

У меня есть объект, вложенный в родительский объект. Внутренний объект имеет 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:

Что бы вызвать контекст заблудиться и что я могу сделать, чтобы получить его обратно, так что this ссылается на views.settings объект?

+2

Безотносительно звонит ваша функция «INIT» делает это таким образом, чтобы потерять контексте ('this' значение). Значение по умолчанию для 'this' является глобальным контекстом (если вы не находитесь в режиме« строгого »). – 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

 Смежные вопросы

  • Нет связанных вопросов^_^