2016-09-22 3 views
2

У меня есть класс с методом, который вызывает другие методы:ES6: Если у класса есть метод?

class MyClass { 
    build(methods) { 
    methods.forEach((method) => { 
     if (this.method) { 
     this.method(); 
     } 
    }); 
    } 

    stuff() {} 
    moreStuff() {} 
} 

const a = MyClass(); 
a.build(['stuff', 'moreStuff']); 

Я не смог найти какие-либо ссылки на каких-либо специальных методах классов. Моя первая мысль заключалась в том, чтобы использовать hasOwnProperty (однако eslint nags меня, что я не должен использовать его внутри класса). Приведенный выше подход не будет надежно работать, поскольку классы имеют встроенные функции.

Я также рассматривал Reflect как возможную экономию, но я действительно мог бы использовать некоторые рекомендации относительно наилучшей практики для этого сценария?

+0

Покажите нам, как вы собираетесь называть 'build', пожалуйста, – Bergi

+0

« * ссылка на какие-либо специальные методы для классов * "- это потому, что классы ничего особенного и не нуждаются в каких-либо специальных методах. Это просто функция-конструктор с объектами '.prototype', как всегда (хотя их прототипные методы не перечислены). – Bergi

+0

@ Bergi Я понимаю, что это просто синтаксический сахар, но я действительно надеялся, что у них будут какие-то классные методы самоанализа. Я обновил свой код. Я предполагаю, что я должен реорганизовать и разделить метод 'build' на функцию, а затем использовать какой-то« Reflect ». –

ответ

3

Я думаю, что вы ищете

build (methodnames) { 
    for (const methodname of methodnames) { 
     if (typeof this[methodname] == "function") { 
      this[methodname](); 
     } 
    } 
} 

Там нет ничего особенного классов - и на самом деле вы должны их игнорировать. Если вы хотите вызвать какой-то метод, важно только то, что в качестве значения свойства есть функция. Не имеет значения, является ли метод собственным свойством объекта-прототипа класса, создавшего экземпляр.

+0

Будет ли анти-шаблон иметь этот метод сборки внутри класса, следует ли его разделить на другую функцию? –

+0

'build' звучит как метод' static' для меня (т.е. 'var newInstance = MyClass.build (...)'), но так, как вы его написали (или я написал его в своем ответе), это всего лишь экземпляр метод, и это совершенно нормально в классе – Bergi

+0

Спасибо! Это дает мне уверенность двигаться вперед. Мне нужно будет больше узнать обо всем этом позже, просто хотел выйти из новой функции класса. –

Смежные вопросы