Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обращение к более глобальному this (https://javascript.ru/forum/misc/21766-obrashhenie-k-bolee-globalnomu.html)

Greck 23.09.2011 07:56

Обращение к более глобальному this
 
Я в JS новичок, подскажите как сделать красивей.

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

В примере это this.container и this.editColumnsList().

Сейчас я сделал через переменные-ссылки, но как-то некрасиво, по-моему, и я не уверен, что это всегда будет работать как задано. Нагуглить - проблема, я не знаю как это правильно назвать.

Можно ли это сделать стандартными средствами языка или более красивым способом?

var richGrid = {
    container: 'div#grid',

    create: function() {
        var container = this.container;
        $(this.container + ' div.editcolumslist').click(function(e) {
            $(container + ' div.editcolumslist div.popupwnd').togglePopup();
            e.stopPropagation();
        });

        var editColumnsList = function() { this.editColumnsList() };
        $(this.container + 'div.editcolumslist div.popupwnd input').change(function() {
	        editColumnsList();
        });
    },

    editColumnsList: function() { }
};

Спасибо.

Greck 23.09.2011 08:20

Теперь создаю ссылку на весь объект:

var richGrid = {
    container: 'div#grid',

    create: function() {
        var grid = this;
        $(this.container + ' div.editcolumslist').click(function(e) {
            $(grid.container + ' div.editcolumslist div.popupwnd').togglePopup();
            e.stopPropagation();
        });

        $(this.container + 'div.editcolumslist div.popupwnd input').change(function() {
	        grid.editColumnsList();
        });
    },

    editColumnsList: function() { }
};


Так правильно?

nikita.mmf 23.09.2011 11:06

var richGrid = {
    container: 'div#grid',

    create: function() {
        var grid = this;
        $(this.container + ' div.editcolumslist').click($.proxy(function(e) {
            $(this.container + ' div.editcolumslist div.popupwnd').togglePopup();
            e.stopPropagation();
        }, this));

        $(this.container + 'div.editcolumslist div.popupwnd input').change($.proxy(this.editColumnsList, this));
    },

    editColumnsList: function() { }
};

Greck 23.09.2011 17:28

Понял, спасибо.


Часовой пояс GMT +3, время: 18:44.