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

const mc = new MyClass();

mc.extMth = function (data) {
// code
}
Нормально ли так делать (работает как надо) или лучше применить другие механизмы, например события (nodeJs)?
Виталий Б.
35 лет, Украина
939 сообщений
#7 дней назад
Забыл добавить важную деталь. Метод может "подключаться" на лету, во время исполнения кода в классе и должен выдавать текущее состояние счетчика, например. Можно реализовать немного по другому, чтоб не нарушать принцип инкапсуляции...
  1. function D() {
  2.    let i = 0;
  3.    setInterval(() => {
  4.       console.log('in', i);
  5.       if (this.cb) {
  6.          this.cb(i);
  7.       }
  8.       i++;
  9.    }, 2000);
  10.    this.o = (cb) => {
  11.       this.cb = cb;
  12.    }
  13. }
  14. const d = new D();
  15. setTimeout(function() {
  16.    d.o(function(r) {
  17.       console.log('out', r);
  18.    });
  19. }, 6000);
... но суть одна и та же, так проще вынести метод наружу, а нормально это или нет, чтоб не сказали, что гомнокод?
Елена Б.
36 лет, Украина
6860 сообщений
#7 дней назад
Цитата (lufter):
чтоб не сказали, что гомнокод
Все-равно скажут, хоть в лепешку разбейтесь ))) 
Андрей Сокол
31 год, Украина
9 сообщений
#8 часов назад
lufter,
А почему вы так не создаете класс?
  1. class Rectangle { 
  2.  constructor(height, width) {
    this.height = height;
    this.width = width;
     }
    }
Classes ES6 - https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes

там же можно внутри класса создать функции, хотите статическую или можно обычный метод.
  1. class Rectangle { constructor(height, width) {
    this.height = height;
    this.width = width;
    }

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

    calcArea() {
    return this.height * this.width;
    }
    }

Цитата (floppox):
Все-равно скажут, хоть в лепешку разбейтесь ))) 
Почему?
Андрей Сокол
31 год, Украина
9 сообщений
#7 часов назад
function arrayForBar(size) 
{
   this.getRandom = function (minEl, maxEl) {
     return Math.random() * (maxEl - minEl) + minEl;
   }
}
Вы можете объявить внутри.
Елена Б.
36 лет, Украина
6860 сообщений
#7 часов назад
Цитата (Andrew_Fix):
Почему?
Потому что люди так устроены, что всегда найдут к чему придраться. 
Не существует такого кода, которым были бы довольны все. 
Особенно, если это javascript
Цитата (Andrew_Fix):
Почему?
Потому что люди так устроены, что всегда найдут к чему придраться. 
Не существует такого кода, которым были бы довольны все. 
Особенно, если это javascript
Андрей Сокол
31 год, Украина
9 сообщений
#6 часов назад
Цитата (floppox):
Не существует такого кода, которым были бы довольны все. 
floppox
,
Похоже на какую то выжималовку. Типа хотят выгнать человека с работы и начинают придираться ко всему. Если говорить про норм компании то там нужно просто придерживаться стандартов.
Сидоров Влад
36 лет, Россия
890 сообщений
#4 часа назад
А причем тут способ объявления классов?
Тут же спрашивают насколько кошерно прилеплять методы динамически (насколько я понял из
Метод может "подключаться" на лету
)
Скажу от себя -  по мне это как-то стремновато и лучше передавать функцию как коллбек или в конструктор или в один из методов. Но в js что только не сделают.
Андрей Сокол
31 год, Украина
9 сообщений
#4 часа назад
inter-job,
Цитата (inter-job):
в один из методов
Также думаю что это лучше.
Андрей Андреев
27 лет, Беларусь
797 сообщений
#2 часа назад
Наследование?