Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Классы js. Как обратиться к свойству класса из обработчика события клик (https://javascript.ru/forum/misc/56234-klassy-js-kak-obratitsya-k-svojjstvu-klassa-iz-obrabotchika-sobytiya-klik.html)

Аленький цветочек 06.06.2015 02:43

Классы js. Как обратиться к свойству класса из обработчика события клик
 
Здравствуйте. Я недавно начала изучать js и столкнулась с такой проблемой: создаю 2 объекта а0 и а1 класса А(). Запуская для каждого метод aMethod.genDiv, он создает 2 кнопки и на каждую вешает событие клика. Обработчик aClick увеличивает aMethod.genDiv.something.some1 на 1.
function A() {
    this.aMethod = {
        something: {
            some1: 1,
            some2: 2
        },
        genDiv: function(num){
            var wrapper = document.getElementById('wrapper');
            var a = document.createElement('input');
            a.id = 'a' + num;
            a.type = 'button';
            a.value = a.id;
            a.addEventListener('click', this.aClick);
            wrapper.appendChild(a);

        },
        aClick:function(){
            console.log(this.something.some1); // выдает undefinde , думаю,
                                                               //тк в обработчике this  это
                                                               // сам инпут, а не 
                                                              //nameObj.aMethod.something.some1
            this.something.some1++;
            
        }
    }
}
window.onload = function () {
    var objName;
    for(var i = 0; i < 2; i++){
        objName = 'a' + i;
        objName = new A();
        objName.aMethod.genDiv(i);
    }
}

Вопрос: как нужно правильно обратиться из обработчика события клик к nameObj.aMethod.something.some1 . Понимаю, что нельзя напрямую a0.aMethod.something.some1 тк есть еще объект a1. И в дальнейшем могут появиться и другие a2,a3...aN. Заранее спасибо

рони 06.06.2015 09:23

Аленький цветочек,
a.addEventListener('click', this.aClick.bind(this));

Аленький цветочек 06.06.2015 16:29

рони,
Огромное спасибо, заработало))
function A() {
    this.aMethod = {
        something: {
            some1: 1,
            some2: 2
        },
        genDiv: function(num){
            var wrapper = document.getElementById('wrapper');
            var a = document.createElement('input');
            a.id = 'a' + num;
            this.aId = a.id;
            a.type = 'button';
            a.value = a.id;
            a.addEventListener('click', this.aClick.bind(this));
            wrapper.appendChild(a);
        },
        aClick:function(){
            console.log(this.something.some1); // 1
        }
    }
}
window.onload = function () {
    var objName;
    for(var i = 0; i < 2; i++){
        objName = 'a' + i;
        objName = new A();
        objName.aMethod.genDiv(i);
    }
}


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