@symnoob

Может кто объяснит и помочь исправить ошибку?

Может кто помочь исправить ошибку в Javascript и объяснить почему выполняется click event при загрузке страницы?

вот мой script:

export default class MyClass{
    constructor() {
        if(MyClass.instance instanceof MyClass){
            return MyClass.instance;
        }
        this.initEvents(this);
        MyClass.instance = this;
    }

    initEvents(self){
        let saveButton = document.getElementById('save');
        if (saveButton){
            saveButton.addEventListener('click', ()=>{
                this.saveAction(self);
            })
        }
    }

    saveAction(self){
        console.log('do Something');
    }
}


Вызывается всё это вот так:
import MyClass from "./myclass';

$(document).ready(function (){
    let mySelector = document.getElementById('my-selector');
    if (mySelector){
        new MyClass();
    }
});


И ещё вопрос, можно ли как-то перенести проверку наличия селектора в конструктор класса?
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Создается ощущение, что ̶в̶ы̶ ̶н̶е̶ ̶п̶о̶н̶и̶м̶а̶е̶т̶е̶ ̶J̶S̶ и не умеете пользоваться инструментами отладки:
  1. эта конструкция ненужна. (Тут я не прав, пусть это будет синглтон, удалять пункт я не буду, накосячил так накосячил))))
    if(MyClass.instance instanceof MyClass){
                return MyClass.instance;
            }

    Она, непонятным образом мутировавший пережиток тех времен когда классы создавали так:
    function MyClass(){
            if( !(this instanceof MyClass) ){
                // если MyClass() был вызван как функция а не как конструктор, то исправляем ситуацию за нерадивого программиста
                return new MyClass();
            }
    }


    эта строчка абсолютно бессмысленна.
    MyClass.instance = this;
    потому что когда вы создадите объект класса
    const myClass = new MyClass();

    то внутри всех методов инстанса myClass будет доступен this === myClass === myClass.instance

  2. параметр self в методе initEvents(self) в вашем коде нигде не используется

  3. установите в дебагере точку останова на
    saveButton.addEventListener('click', ()=>{
                    this.saveAction(self);
                })

    и смотрите по стеку вызовов, что у вас вызывает click event
    6085cc70560d1406236295.png



И ответьте пожалуйста, с чего вы взяли, что click event выполняется при загрузке страницы?

у меня вот ничего при загрузке не выполняется:

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы