Виталий Бохин
953 сообщения
#6 лет назад
Приветствую всех. Хочу узнать ваше мнение, нормально или нет, для общей практики, реализовывать метод вне класса? Есть код, который нужно выполнять в другом скоупе, управляя им из класса, и чтоб он был привязан к экземпляру класса. Для этого описываю метод снаружи, и вызываю его из класса.
[code]function MyClass(){
// что-то делаем и передаем результат в наружный метод
this.extMth(data);
}

const mc = new MyClass();

mc.extMth = function (data) {
// code
}[/code]Нормально ли так делать (работает как надо) или лучше применить другие механизмы, например события (nodeJs)?
Виталий Бохин
953 сообщения
#6 лет назад
забыл добавить важную деталь. Метод может "подключаться" на лету, во время исполнения кода в классе и должен выдавать текущее состояние счетчика, например. Можно реализовать немного по другому, чтоб не нарушать принцип инкапсуляции...
[code][list=1]
  • function D() {
  •    let i = 0;

  •    setInterval(() => {

  •       console.log('in', i);

  •       if (this.cb) {
  •          this.cb(i);
  •       }

  •       i++;
  •    }, 2000);

  •    this.o = (cb) => {
  •       this.cb = cb;
  •    }
  • }

  • const d = new D();

  • setTimeout(function() {
  •    d.o(function(r) {
  •       console.log('out', r);
  •    });
  • }, 6000);[/list][/code]... но суть одна и та же, так проще вынести метод наружу, а нормально это или нет, чтоб не сказали, что гомнокод?
    Елена Б.
    6863 сообщения
    #6 лет назад
    [quote=lufter]чтоб не сказали, что гомнокод[/quote]Все-равно скажут, хоть в лепешку разбейтесь ))) 
    Андрей С.
    10 сообщений
    #6 лет назад
    lufter,
    А почему вы так не создаете класс?
    [code][list=1]
  • class Rectangle { 
  •  constructor(height, width) {
    this.height = height;
    this.width = width;
     }
    }
    [/list][/code]Classes ES6 - там же можно внутри класса создать функции, хотите статическую или можно обычный метод.
    [code][list=1]
  • class Rectangle { constructor(height, width) {
    this.height = height;
    this.width = width;
    }

    get area() {
    return this.calcArea();
    }

    calcArea() {
    return this.height * this.width;
    }
    }
    [/list][/code]
    [quote=floppox]Все-равно скажут, хоть в лепешку разбейтесь ))) [/quote]Почему?
  • Андрей С.
    10 сообщений
    #6 лет назад
    [code]function arrayForBar(size)
    {
       this.getRandom = function (minEl, maxEl) {
         return Math.random() * (maxEl - minEl) + minEl;
       }
    }[/code]Вы можете объявить внутри.
    Елена Б.
    6863 сообщения
    #6 лет назад
    [quote=Andrew_Fix]Почему?[/quote]Потому что люди так устроены, что всегда найдут к чему придраться. 
    Не существует такого кода, которым были бы довольны все. 
    Особенно, если это javascript  
    [quote=Andrew_Fix]Почему?[/quote]Потому что люди так устроены, что всегда найдут к чему придраться. 
    Не существует такого кода, которым были бы довольны все. 
    Особенно, если это javascript  
    Андрей С.
    10 сообщений
    #6 лет назад
    [quote=floppox]Не существует такого кода, которым были бы довольны все. [/quote]floppox,
    Похоже на какую то выжималовку. Типа хотят выгнать человека с работы и начинают придираться ко всему. Если говорить про норм компании то там нужно просто придерживаться стандартов.
    Сидоров В.
    918 сообщений
    #6 лет назад
    А причем тут способ объявления классов?
    Тут же спрашивают насколько кошерно прилеплять методы динамически (насколько я понял из
    Метод может "подключаться" на лету
    )
    Скажу от себя -  по мне это как-то стремновато и лучше передавать функцию как коллбек или в конструктор или в один из методов. Но в js что только не сделают.
    Андрей С.
    10 сообщений
    #6 лет назад
    inter-job,
    [quote=inter-job]в один из методов[/quote]Также думаю что это лучше.
    Андрей А.
    798 сообщений
    #6 лет назад
    наследование?
    Андрей С.
    10 сообщений
    #6 лет назад
    b0nn1e,
    Наследование?
    Тоже об этом подумал.
    Но у него обязательное условие - 
    "подключаться" на лету, во время исполнения кода
    Думаю калбек лучше.
    Виталий Бохин
    953 сообщения
    #6 лет назад
    [quote=inter-job]Но в js что только не сделают.[/quote]Этим js и прекрасен и ужасен одновременно. Вы правы, стремновато, сделал через колбэк