Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jquery this и object this (https://javascript.ru/forum/jquery/18996-jquery-i-object.html)

tarya 22.07.2011 14:10

jquery this и object this
 
Добрый день друзья. Подскажите новичку если есть возможность.

Например у меня есть объект.

var o = { fieldname:'a', get:function(){ alert(this.arr[1]);}, arr: [1,2,3] };


Если сделать:

o.get(); // 2


То все будет работать как и задумано. И ответ будет 2.

Вопрос в ином, например в методе get у нас будет кусочек jquery кода.

Например:

$(this.fieldname)
        .click(function() {
            $(this)... ....
        })


То ничего работать не будет. Так как this.fieldname относится к объекту, а $(this) - это к jquery.

Не знаю понятно ли изъяснился, прошу подсказать как обойти данную проблему, или как это грамотно решается? Спасибо.

ваый 22.07.2011 14:32

var obj = {
    selector: '#test',
    test: function() {
        var _this = this;
        $(this.selector).click(function() {
            console.log(this, _this);
        });
    }
};

tarya 22.07.2011 14:59

Спасибо, проанализирую.

tarya 22.07.2011 21:07

С сожалению такой вариант наверное не будет работать так как переменная var _this = this; будет доступна только в методе test, а если будет второй метод то как из него вызвать _this.test() если там ничего не известно о ней.

Тут вопрос в чем, например var _this = this; можно вынести за пределы объекта, но я хочу этот объект клонировать, что уже и сделал, чтоб можно было вызвать два разных объекта:

var bTest = clone(aTest);
    aTest.On("#searchquery");
    bTest.On("#global-search");


Пока же у меня не запускается вторая версия, что происходит тот конфликт о котором я писал выше.

Спасибо за ваше время.

tarya 22.07.2011 22:07

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

Спасибо за внимание.


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