Как получить доступ к публичному свойству родительской функции в JavaScript? - PullRequest
3 голосов
/ 07 ноября 2011

Я пытаюсь написать несколько функций javascript для веб-приложения.

Следуя приведенным здесь советам: Как объявить пространство имен в JavaScript?

Iя пытаюсь сделать код ненавязчивым, оборачивая все в именованные функции, однако я сталкиваюсь с трудностями при доступе к свойствам родительской функции, когда она находится внутри дочерней анонимной функции.

Например:

var title_picker = new function(){
    // This property should be public
    this.callback=function(){};


    var ok=function(){
        var title = $('input#title').val();
        callback(title) // <--- 
    }
...

Как лучше всего обращаться к свойству callback внутри функции "ok"?

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

С кодом, как написано, нет там нет.

Вы можете получить доступ к переменным из области видимости родителя, если они не перезаписаны в более узкой области видимости.

thisвсегда перезаписывается.

Вы можете скопировать this в другую переменную, которая остается в области видимости:

var title_picker = new function(){

    var self = this; // Copy this to a variable that stays in scope

    // This property should be public
    this.callback = function(){};


    var ok=function(){
        var title = $('input#title').val();
        self.callback(title) // self is still in scope
    }
...
2 голосов
/ 07 ноября 2011

Возможно что-то вроде этого:

var title_picker = new function(){
    // This property should be public
    this.callback=function(){};
    var that = this;


    var ok=function(){
        var title = $('input#title').val();
        that.callback(title) // <--- 
    }
...

Хотя есть много фреймворков, которые делают подобные вещи для вас (yui, dojo, prototype ...)

...